Обновление подмодуля Git на конвейерах с размещенным агентом
У меня есть собственный агент и репозиторий git с подмодулями. URL-адреса в.gitmoduleshttp://
Когда я пытаюсь инициализировать задание, не удается обновить подмодули.
git submodule sync
git submodule update --init --force
Cloning into 'foo-dev-common'...
Submodule 'foo-dev-common' (https://MY_ORG@dev.azure.com/MY_ORG/PInC/_git/foo-dev-common) registered for path 'foo-dev-common'
fatal: could not read Password for 'https://MY_ORG@dev.azure.com': terminal prompts disabled
fatal: clone of 'https://MY_ORG@dev.azure.com/MY_ORG/PInC/_git/foo-dev-common' into submodule path 'foo-dev-common' failed
##[error]Git submodule update failed with exit code: 128
Finishing: Checkout foo-rose-identity-service@submod_bd_mahesh to s/foo-rose-identity-service
Я также попытался добавить репозиторий себя и
steps:
- checkout: self
submodules: true
persistCredentials: true
2 ответа
Ответ forvaidya не сработал для меня (хотя сейчас 4 года спустя).
(Относительные URL в.gitmodules
разрешаются в полные URL-адреса в .git/config
по git submodule sync
.)
persistCredentials: true
сохранит заголовок авторизации доступным в git config
для будущих шагов, но он привязан к вашему основному URL-адресу репо. Пока репозиторий подмодулей находится в одной организации, вы можете повторно использовать заголовок, например, в конвейерном скрипте Powershell:
steps:
- checkout: self
submodules: false
persistCredentials : true
- powershell: |
$header = $(git config --get-all http.$(Build.Repository.Uri).extraheader)
git -c http.extraheader="$header" submodule sync
git -c http.extraheader="$header" submodule update --init --force --depth=1
(Эти подробности я почерпнул из логов стандартного checkout
шаг. Обратите внимание на ссылку наBuild.Repository.Uri
переменная трубопровода.)
Вышеупомянутое позволит выполнить полную ("непрозрачную") проверку основного репо (полезно, например, для GitVersion) без подмодулей и неглубокую проверку любых подмодулей.
Изменить: задокументированный способ получить заголовок авторизации:
$header = "AUTHORIZATION: bearer $(System.AccessToken)"
После создания относительного пути подмодуля git он работал
url= ../foo-dev-common
вместо того
url=https://MY_ORG@dev.azure.com/MY_ORG/PInC/_git/foo-dev-common