Выполнение команд git внутри задания сборки в Visual Studio Team Services (ранее было VSO)

[Среда: Team Services, GIT, размещенный агент сборки]

Я хотел бы создать определение сборки Team Services, которое может выполнять следующие действия:

  1. Выполнение скрипта для генерации некоторых новых файлов на основе существующих файлов в репо

  2. Зафиксируйте / отправьте эти сгенерированные файлы обратно в репозиторий

Я могу сделать № 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) теперь имеет встроенную функциональность для этого:

  1. Предоставьте учетной записи Project Collection Build Service (account_name) доступ к соответствующему хранилищу в VSTS.
  2. На этапе агента установите флажок Разрешить сценариям доступ к токену OAuth.
  3. Теперь в рамках задачи вы можете ссылаться на переменную SYSTEM_ACCESSTOKEN чтобы получить доступ к хранилищу git:git clone https://randomusername:${SYSTEM_ACCESSTOKEN}@instance.visualstudio.com/proj1/_git/repo

Ссылка: https://github.com/Microsoft/vsts-tasks/issues/962

Вы можете установить расширение 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 в расширении:

  1. Создайте сценарий Power-Shell с кодом в сценарии "EnableGitRemoteAccess.ps1" и добавьте его в систему управления версиями.
  2. Включите параметр "Разрешить сценариям доступ к токену OAuth" в определении сборки.
  3. Добавьте задачу PowerShell в определение сборки и задайте путь к сценарию для включения удаленного доступа git.
  4. Добавьте еще одну задачу 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-вклады в сценарии, вам нужно

  1. Убедитесь, что все компоненты, указанные в VSTS Agent, выполнены.

  2. Убедитесь, что вы следовали инструкциям в / 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

Другие вопросы по тегам