В моем конвейере выпуска у меня есть задача powershell, где я хочу вызвать некоторые пользовательские команды git, такие как git fetch
Я получаю
фатальный: Невозможно подсказать, потому что подсказки терминала отключены.
фатальный: не удалось прочитать пароль для «https://[email protected]»: подсказки терминала отключены
Как аутентифицировать агента?
Я могу использовать ту же аутентификацию, что и Агент в задаче «Загрузка артефактов».
Это не удается, потому что командная строка git ожидает ввода учетных данных.
Но конвейер ADO уже имеет действительный токен в предопределенной переменной env System.AccessToken
Добавьте -c http.extraheader = "AUTHORIZATION: bearer $(System.AccessToken)"
(в синтаксисе cmd
) в начале командной строки git (непосредственно перед глаголом git pull
)
Синтаксис может быть немного другим в powershell.
См. https://learn.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devops&tabs=yaml#systemaccesstoken документацию по предопределенным переменным и точный синтаксис преобразования.
В powershell это должно быть что-то вроде $env:SYSTEM_ACCESSTOKEN
Мне пришлось добавить -c
перед глаголом, а не после, например git -c .... fetch
@Liero И это сработало после этого? Если да, пожалуйста, примите ответ, и я обновлю ответ, чтобы он был правильным....
Да, но другой ответ уже принят, я могу принять только один, но вы получили голосование. Кроме того, мне пришлось включить опцию «Разрешить скриптам доступ к токену OAuth» в задании.
@Льеро Ярмарка. Я не видел, чтобы вы уже приняли один.
Пожалуйста, ознакомьтесь с этой страницей Microsoft Learn об использовании пользовательских команд git в конвейерах:
Хитрость в сохранении входа в систему заключается в использовании persistCredentials
steps:
- checkout: self
persistCredentials: true
Это удобно делать на этапе сборки, когда извлекается одно или несколько репозиториев.
В вашем случае это на этапе развертывания Не уверен, что он будет работать и в развертывании...
Просто из любопытства... Что функционально в репо? И почему вы делаете это на этапе развертывания?
Существует также альтернатива: вы можете использовать несколько артефактов в своих классических конвейерах выпуска. Может быть, это поможет вам?
Тогда конвейер сделает всю тяжелую работу за вас:
Не уверен, есть ли возможность persistCredential
в классическом выпуске. Репозиторий содержит не код, а шаблоны электронной почты/pdf. Эти шаблоны должны развертываться независимо от приложения.
Извините, я пропустил часть классического конвейера выпуска. Обновлю свой ответ
@Liero Могу ли я предложить (лучшую?) альтернативу, смотрите мою редакцию прямо сейчас!
Спасибо, я знаю об этом, но это не совсем то, что я хочу. Мне нужно получить конкретную версию в каталоге развертывания, а не в рабочем каталоге агента сборки. По некоторым причинам в каталоге развертывания есть клонированный репозиторий git, поэтому я не могу просто скопировать туда артефакты.
хорошо, не беспокойтесь, заголовки OAuth + также являются хорошим вариантом
Чтобы использовать токен агента в качестве аутентификации команды git в конвейере выпуска, вы можете сделать следующее:
Включите параметр «Разрешить скриптам доступ к токену OAuth» в задании.
Затем в задаче PowerShell вы можете использовать переменную среды «$env:SYSTEM_ACCESSTOKEN
» в командных строках git в качестве аутентификации.
Например:
git clone https://:$env:[email protected]/MyOrg/MyProj/_git/MyRepo
Как сказал Bright Ran-MSFT, вы можете использовать git clone https://:$env:[email protected]/MyOrg/MyProj/_git/MyRepoYou
Необходимо отключить Защитить доступ к репозиториям в пайплайнах YAML настройка пайплайна проекта для клонирования в классическом пайплайне
у него есть разрешения, потому что он может загружать артефакты, которые являются тем же репозиторием git. Однако мне нужно сделать то же самое в другом каталоге в powershell. Вопрос в том, как пройти аутентификацию в качестве службы сборки коллекции проектов.