Выполнение команд git внутри задания сборки в Visual Studio Team Services (ранее было VSO)
[Среда: Team Services, GIT, размещенный агент сборки]
Я хотел бы создать определение сборки Team Services, которое может выполнять следующие действия:
Выполнение скрипта для генерации некоторых новых файлов на основе существующих файлов в репо
Зафиксируйте / отправьте эти сгенерированные файлы обратно в репозиторий
Я могу сделать № 1 без проблем. Но я не уверен, как я могу сделать #2.
Я обнаружил, что на самом деле смог запустить git.exe из сборки. Но я не уверен, как я могу передать учетные данные Git. Основываясь на журналах сборки, он терпит неудачу, потому что пытается получить имя пользователя от stdin.
Я попытался добавить шаг в определение сборки с помощью чего-то вроде "git config --global user.name xxxx", но это все равно не помогло.
Это поддерживаемый сценарий вообще? Какие-либо предложения?
Спасибо!
редактировать
Я попробовал следующий подход в моем скрипте сборки:
git -c http.extraheader="AUTHORIZATION: bearer %SYSTEM_ACCESSTOKEN%" pull ...
Казалось, что это работает для таких команд, как pull и т. Д. Но когда я пытался отправить изменения, я получил следующую ошибку:
fatal: unable to access 'https://example.visualstudio.com/SampleTeam/_git/SampleRepo/': SSL read: error:00000000:lib(0):func(0):reason(0), errno 10054
Мысли?
6 ответов
Извините, что отвечаю на мой вопрос здесь...
Я только что получил подсказку от какого-то эксперта TFS, который указал мне на эту статью: https://www.visualstudio.com/en-us/docs/build/scripts/git-commands, что отлично решило мою проблему.
Я думаю, что должен поделиться этим, чтобы помочь тому, кто может столкнуться с той же ситуацией, что и я.
Здесь я процитирую ключевые шаги (переформатировал немного):
Предоставить разрешения на управление версиями сервису сборки
Перейдите на вкладку панели управления версиями.
Team Services: https://{your-account}.visualstudio.com/DefaultCollection/{your-team-project}/_admin/_versioncontrol
Локальный: https: // {ваш-сервер}:8080/tfs/DefaultCollection/{ваш-проект-команды} / _admin / _versioncontrol
На вкладке " Контроль версий " выберите репозиторий, в котором вы хотите запускать команды Git, а затем выберите " Служба сборки коллекций проектов" (account_name). Предоставьте разрешения, необходимые для команд Git, которые вы хотите запустить. Обычно вы хотите предоставить:
- Создание ветки: Разрешить
- Поспособствуйте: Разрешить
- Читайте: унаследованное разрешение
- Создание тега: унаследованное разрешение
Когда вы закончите предоставление разрешений, обязательно нажмите Сохранить изменения.
Включите определение вашей сборки для запуска Git.exe
- На вкладке переменных установите эту переменную:
system.prefergit = true
- На вкладке параметров выберите Разрешить сценариям доступ к токену OAuth.
С этими настройками нет необходимости устанавливать расширение Git Build Tools или настраивать диспетчер учетных данных. Вам также не нужно явно устанавливать дополнительный заголовок для токена OAuth. Я чувствую, что это действительно очень аккуратное решение.:)
Но очень ценю помощь Эдди и VonC!
Visual Studio Team Services (VSTS) теперь имеет встроенную функциональность для этого:
- Предоставьте учетной записи Project Collection Build Service (account_name) доступ к соответствующему хранилищу в VSTS.
- На этапе агента установите флажок Разрешить сценариям доступ к токену OAuth.
- Теперь в рамках задачи вы можете ссылаться на переменную
SYSTEM_ACCESSTOKEN
чтобы получить доступ к хранилищу git:git clone https://randomusername:${SYSTEM_ACCESSTOKEN}@instance.visualstudio.com/proj1/_git/repo
Вы можете установить расширение Git Build Tools, а затем добавить задачу "Разрешить удаленный доступ Git" в своем определении сборки. Убедитесь, что на вкладке "Параметры" включена функция "Разрешить сценариям доступ к токену OAuth".
Включить Git Remote Access
Некоторые операции требуют доступа к удаленному хранилищу во время сборки. Эта задача обновляет удаленный репозиторий Git на агенте, чтобы разрешить доступ к обратному репозиторию в Visual Studio Team Services.
Требования
Чтобы эта задача сборки работала, необходимо, чтобы в параметрах определения сборки был установлен параметр "Разрешить доступ к OAuth-токенам".
параметры
Включить Git Remote Access
Имя удаленного: Имя удаленного, которое должно быть обновлено. По умолчанию это источник.
Связанные задачи
Восстановление Git Remote следует вызывать в конце определения сборки, чтобы восстановить его исходное значение.
Известные вопросы
Операции с Git-Lfs, такие как git lfs fetch, все равно не будут работать с этим. Посмотреть этот выпуск Git-Lfs
Добавьте шаги для использования сценария powershell в расширении:
- Создайте сценарий Power-Shell с кодом в сценарии "EnableGitRemoteAccess.ps1" и добавьте его в систему управления версиями.
- Включите параметр "Разрешить сценариям доступ к токену OAuth" в определении сборки.
- Добавьте задачу PowerShell в определение сборки и задайте путь к сценарию для включения удаленного доступа git.
- Добавьте еще одну задачу PowerShell в определение сборки, чтобы зафиксировать и отправить изменения.
Код, который я использую для фиксации и отправки изменений:
git add .
git commit -m "changesinbuild"
git push origin master 2>&1 | Write-Host
Любой файл, который вы можете сгенерировать из источника, обычно рассматривается как артефакт сборки, а не добавляется / фиксируется / отправляется в репозиторий git.
Тем не менее, если вы можете, вы должны использовать ssh url вместо https one: ssh потребуется ключ ssh, и если ваш закрытый ключ ssh не содержит парольной фразы, git не будет запрашивать что-либо на stdin.
Другой способ - использовать Microsoft GCH (Git Credential Helper), который включен в Git для Windows (начиная с Git 2.7.3, март 2016 г.).
Смотрите этот ответ для примера. Это будет кешировать ваш логин / пароль в хранилище учетных данных Windows.
Это всего лишь продолжение ответа Тони Блюз.
Извините, я не могу публиковать ссылки, так как моя репутация ниже 10, но все они размещены на сайте visualstudio, поэтому я уверен, что вы сами можете это выяснить.
Чтобы разрешить GIT-вклады в сценарии, вам нужно
Убедитесь, что все компоненты, указанные в VSTS Agent, выполнены.
- Mac OS: https://www.visualstudio.com/en-us/docs/build/admin/agents/v2-osx
- Windows: / en-us / docs / build / admin / agents / v2-windows
- Linux: / en-us / docs / build / admin / agents / v2-linux
Убедитесь, что вы следовали инструкциям в / en-us / docs / build / scripts / git-команды
- Особенно добавьте необходимые разрешения для учетной записи Project Build Service в своем хранилище - по крайней мере, Contribute (не стесняйтесь рассматривать другие разрешения в соответствии с вашими потребностями) - это реальная причина "ошибки чтения SSL"
Отличие этого поста от поста Тони состоит в том, что в нашей конфигурации (TFS 2015; агент VSTS установлен на Mac OS Sierra) нам пришлось добавить разрешение "Contribute" для учетной записи "Project Build Service" - поэтому не для учетной записи со словом "коллекция" упоминается в названии. Также будьте осторожны и не перепутайте это с группой под названием "Учетные записи службы сборки коллекций проектов". Я считаю, что она может использоваться при определенных условиях, но по умолчанию она не работает. Я отмечаю это, так как это то, что я случайно сделал, и поэтому я потратил дополнительное время на отладку того, что не так.
Пожалуйста, проверьте следующее изображение. Его можно найти в вашем проекте -> Панель управления -> Контроль версий -> GIT-репозиторий
Также, пожалуйста, будьте осторожны с системными требованиями, так как в моем случае (на MacOS Sierra) часть с символическими ссылками для двух конкретных каталогов стала критической. Конкретные системные требования для OSX размещены в [github]/Microsoft/vsts-agent/blob/master/docs/start/envosx.md и состояниях
Установите openssl
$ brew update
$ brew install openssl
Создавайте символические ссылки на openssl libs - это требуется в MacOS (Sierra)
$ mkdir -p /usr/local/lib/
$ ln -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/
$ ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/lib/
Узнайте свою версию GIT
$ git --version
Обновите GIT, если у вас ниже 2.9.0
$ brew update
$ brew install git
У меня была такая же проблема. Решением было поместить параметры git config в часть скрипта yaml. Посмотрите эту проблему GitHub для примеров:
https://github.com/Microsoft/azure-pipelines-agent/issues/1925