it-swarm.com.ru

Выполнение команд 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 и т.д. Но когда я пытался Push-изменения, я получил следующую ошибку:

fatal: unable to access 'https://example.visualstudio.com/SampleTeam/_git/SampleRepo/': SSL read: error:00000000:lib(0):func(0):reason(0), errno 10054

Мысли?

21
Yutao Huang

Извините, что отвечаю на мой вопрос здесь ...

Я только что получил подсказку от одного эксперта по TFS, который указал мне на эту статью: https://www.visualstudio.com/en-us/docs/build/scripts/git-commands , которая отлично решила мою проблему ,.

Я думаю, что должен поделиться этим, чтобы помочь тому, кто может столкнуться с той же ситуацией, что и я.

Здесь я процитирую ключевые шаги (переформатировал немного):

Предоставить разрешения на управление версиями службе сборки

Перейдите на вкладку панели управления версиями.

  • Службы коллектива: https: // {your-account} .visualstudio.com/DefaultCollection/{your-team-project}/_admin/_versioncontrol

  • Локальный: https: // {ваш-сервер}: 8080/tfs/DefaultCollection/{ваш-проект-команды}/_admin/_versioncontrol

На вкладке Version Control выберите репозиторий, в котором вы хотите запускать команды Git, а затем выберите Project Build Service (account_name). Предоставьте разрешения, необходимые для команд Git, которые вы хотите запустить. Обычно вы хотите предоставить:

  • Создание ветки: Разрешить
  • Внести вклад: разрешить
  • Read: унаследованное разрешение
  • Создание тега: унаследованное разрешение

Когда вы закончите предоставление разрешений, обязательно нажмите Сохранить изменения.

Включите определение вашей сборки для запуска Git.exe

  • На вкладке variable установите эту переменную: system.prefergit = true
  • На вкладке options выберите Разрешить сценариям доступ к токену OAuth.

С этими настройками нет необходимости устанавливать расширение Git Build Tools или настраивать диспетчер учетных данных. Вам также не нужно явно устанавливать дополнительный заголовок для токена OAuth. Я чувствую, что это действительно очень аккуратное решение. :)

Но очень ценю помощь Эдди и VonC!

34
Yutao Huang

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

4
PotatoFarmer

Вы можете установить Git Build Tools extension, а затем добавить задачу «Разрешить удаленный доступ Git» в своем определении сборки. Убедитесь, что функция «Разрешить сценариям доступ к OAuth-токену» на вкладке «Параметры» включена.

Включить Git Remote Access

Для определенных операций требуется доступ к удаленному хранилищу в течение сборка. Эта задача обновляет удаленный репозиторий Git на агенте разрешить доступ к исходному хранилищу в Visual Studio Team Сервисы.

Требования

Чтобы эта задача сборки работала, необходимо, чтобы разрешить сценарии Параметр Access OAuth Token устанавливается в параметрах определения сборки.

Параметры

Включить Git Remote Access

Имя удаленного: Имя удаленного, которое должно быть обновлено. По умолчанию Происхождение.

Связанные задачи

Восстановление Git Remote следует вызывать в конце определения сборки восстановить пульт к его первоначальному значению.

Известные вопросы

Операции с Git-Lfs, такие как git lfs fetch, все равно не будут работать с этим. Увидеть этот вопрос Git-Lfs

Добавьте шаги для использования сценария powershell в расширении:

  1. Создайте сценарий Power-Shell с кодом в сценарии «EnableGitRemoteAccess.ps1» и добавьте его в систему управления версиями.
  2. Включите параметр «Разрешить сценариям доступ к токену OAuth» в определении сборки.
  3. Добавьте задачу PowerShell в определение сборки и задайте путь к сценарию для включения удаленного доступа git .  enter image description here
  4. Добавьте еще одну задачу PowerShell в определение сборки, чтобы зафиксировать и отправить изменения.

Код, который я использую для фиксации и отправки изменений:

git add .
git commit -m "changesinbuild"
git Push Origin master 2>&1 | Write-Host
3
Eddie Chen - MSFT

Любой файл, который вы можете сгенерировать из источника, обычно рассматривается как артефакт сборки, и not добавляется/фиксируется/отправляется в репозиторий git.

Тем не менее, если вы можете, вы должны использовать ssh url вместо https one: ssh потребуется ключ ssh, и если ваш закрытый ключ ssh не содержит парольной фразы, git не нужно будет ничего запрашивать на stdin.

Другой способ заключается в использовании Microsoft GCH (Git Credential Helper) , который включен в Git для Windows (начиная с Git 2.7.3 , март 2016 г.).
См. этот ответ для примера. Это будет кешировать ваш логин/пароль в хранилище учетных данных Windows.

1
VonC

Это всего лишь продолжение ответа Тони Блюз.

Извините, я не могу публиковать ссылки, так как моя репутация ниже 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
0
T. Tiscalli

У меня была такая же проблема. Решением было поместить параметры git config в часть скрипта yaml. Посмотрите эту проблему GitHub для примеров:

https://github.com/Microsoft/Azure-pipelines-agent/issues/1925

0
mwilson