Git Обновление подмодуля на конвейерах с размещенным агентом - PullRequest
0 голосов
/ 16 июня 2020

У меня есть собственный агент и репозиторий git с подмодулями. URL-адреса в .gitmodules: http://

Когда я пытаюсь инициализировать задание, оно не может обновить подмодули.

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

Я также попытался добавить репозиторий self и

    steps:
  - checkout: self
    submodules: true
    persistCredentials: true

Ответы [ 2 ]

0 голосов
/ 26 августа 2020
Ответ

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.)

Вышеупомянутое будет выполнять sh полную («непрозрачную») проверку основного репо (полезно, например, для GitVersion ), без подмодулей и мелкой проверки любых подмодулей.

Изменить: задокументированный способ получить заголовок авторизации:

    $header = "AUTHORIZATION: bearer $(System.AccessToken)"
0 голосов
/ 16 июня 2020

После создания относительного пути подмодуля git он работал

url= ../foo-dev-common 

вместо

url=https://MY_ORG@dev.azure.com/MY_ORG/PInC/_git/foo-dev-common
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...