Выполнение команд Git в скрипте
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
В некоторых рабочих процессах для выполнения команд Git требуется конвейер сборки. Например, после завершения сборки CI на ветви функций команда может захотеть объединить эту ветку с основной.
Git предоставляется в размещенных агентах Майкрософт и локальных агентах.
Включение сценариев для выполнения команд Git
Примечание.
Прежде чем начать, убедитесь, что удостоверение вашей учетной записи по умолчанию установлено с помощью следующего кода. Это необходимо сделать, как первый шаг после проверка выхода кода.
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
Предоставление разрешений на управление версиями для службы сборок
Перейдите на страницу параметров проекта для вашей организации в организации Параметры> General>Projects.
Выберите проект, который требуется изменить.
В Параметры Project выберите репозитории. Выберите репозиторий, в который нужно запустить команды Git.
Выберите "Безопасность", чтобы изменить безопасность репозитория.
Найдите службу сборки коллекции проектов. Выберите удостоверение {{имя проекта}} Служба сборки ({ваша организация}) (а не учетные записи службы сборки коллекции проектов ({ваша организация})). По умолчанию это удостоверение может считывать из репозитория, но не может отправлять в него какие-либо изменения. Предоставьте разрешения, необходимые для команд Git, которые вы хотите запустить. Как правило, вы хотите предоставить следующее:
- Создать ветвь: Разрешить
- Участие: разрешить
- Чтение: разрешить
- Создание тега: разрешить
Перейдите на вкладку "Панель управления версиями"
Azure Repos:
https://dev.azure.com/{your-organization}/{your-project}/_admin/_versioncontrol
Локальная среда:
https://{your-server}:8080/tfs/DefaultCollection/{your-project}/_admin/_versioncontrol
Если вы видите эту страницу, выберите репозиторий и выберите ссылку:
На вкладке "Управление версиями" выберите репозиторий, в котором требуется выполнить команды Git, а затем выберите службу сборки коллекции проектов. По умолчанию это удостоверение может считывать из репозитория, но не может отправлять в него какие-либо изменения.
Предоставьте разрешения, необходимые для команд Git, которые вы хотите запустить. Как правило, вы хотите предоставить следующее:
- Создать ветвь: Разрешить
- Участие: разрешить
- Чтение: разрешить
- Создание тега: разрешить
Когда вы закончите предоставление разрешений, обязательно нажмите кнопку "Сохранить изменения".
Разрешить скриптам доступ к системным маркерам
Добавьте раздел с заданным checkout
persistCredentials
значением true
.
steps:
- checkout: self
persistCredentials: true
Дополнительные сведения.checkout
Обязательно очистите локальный репозиторий
Некоторые типы изменений в локальном репозитории не удаляются автоматически конвейером сборки. Поэтому обязательно выполните следующее:
- Удалите создаваемые локальные ветви.
- Отмена изменений конфигурации Git.
При возникновении проблем с использованием локального агента убедитесь, что репозиторий чист:
Убедитесь, что checkout
задано clean
значение true
.
steps:
- checkout: self
clean: true
На вкладке переменных создайте или измените переменную и задайте для нее значение
Build.Clean
source
Примеры
Вывод списка файлов в репозитории
На вкладке сборки добавьте следующую задачу:
Задача | Аргументы |
---|---|
Программа: командная строка Вывод списка файлов в репозитории Git. |
Инструмент: git Аргументы: ls-files . |
Слияние ветвь компонента с основным
Вы хотите, чтобы сборка CI объединилась с основной, если сборка выполнена успешно.
На вкладке "Триггеры" выберите непрерывную интеграцию (CI) и включите ветви, которые требуется создать.
Создайте merge.bat
в корне репозитория:
@echo off
ECHO SOURCE BRANCH IS %BUILD_SOURCEBRANCH%
IF %BUILD_SOURCEBRANCH% == refs/heads/main (
ECHO Building main branch so no merge is needed.
EXIT
)
SET sourceBranch=origin/%BUILD_SOURCEBRANCH:refs/heads/=%
ECHO GIT CHECKOUT MAIN
git checkout main
ECHO GIT STATUS
git status
ECHO GIT MERGE
git merge %sourceBranch% -m "Merge to main"
ECHO GIT STATUS
git status
ECHO GIT PUSH
git push origin
ECHO GIT STATUS
git status
На вкладке сборки добавьте эту задачу в качестве последней задачи:
Задача | Аргументы |
---|---|
Служебная программа: пакетный скрипт Запустите merge.bat. |
Путь: merge.bat . |
Вопросы и ответы
Можно ли запускать команды Git, если удаленный репозиторий находится в GitHub или другой службе Git, например Bitbucket Cloud?
Да
Какие задачи можно использовать для выполнения команд Git?
Разделы справки избежать активации сборки CI при отправке скрипта?
Добавьте ***NO_CI***
в сообщение фиксации. Ниже приведены некоторые примеры.
git commit -m "This is a commit message ***NO_CI***"
git merge origin/features/hello-world -m "Merge to main ***NO_CI***"
Добавьте [skip ci]
в сообщение или описание фиксации. Ниже приведены некоторые примеры.
git commit -m "This is a commit message [skip ci]"
git merge origin/features/hello-world -m "Merge to main [skip ci]"
Вы также можете использовать любой из этих вариантов для фиксаций в Azure Repos Git, Bitbucket Cloud, GitHub и GitHub Enterprise Server.
[skip ci]
или[ci skip]
skip-checks: true
илиskip-checks:true
[skip azurepipelines]
или[azurepipelines skip]
[skip azpipelines]
или[azpipelines skip]
[skip azp]
или[azp skip]
***NO_CI***
Нужен ли мне агент?
Для выполнения сборки или выпуска необходим по меньшей мере один агент.
У меня возникли проблемы. Как их устранить?
См. раздел Устранение неполадок со сборками и выпусками.
Мне не удается выбрать пул агентов по умолчанию, и я не могу поставить сборку или выпуск в очередь. Как это устранить?
См. Пулы агентов.
Задача отправки NuGet завершается со следующей ошибкой: "Ошибка: не удается получить сертификат локального издателя". Как это исправить?
Это можно исправить, добавив доверенный корневой сертификат. Можно либо добавить переменную среды NODE_EXTRA_CA_CERTS=file
в агент сборки либо добавить переменную задачи NODE.EXTRA.CA.CERTS=file
в конвейер. Дополнительные сведения об этой переменной см. в документации по Node.js. Инструкции по настройке переменной в конвейере см. в разделе Настройка переменных в конвейере.
Я использую Team Foundation Server локально и не вижу некоторые из этих функций. Почему?
Некоторые из этих функций доступны только в Azure Pipelines и пока недоступны в локальной среде. Некоторые функции доступны в локальной среде, если вы выполнили обновление до последней версии Team Foundation Server.