Запускайте команды Git в скриптах pipeline

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

Команды Git доступны для рабочих процессов сборки для агентов, размещённых на серверах Microsoft, и саморазмещённых агентов. Например, после завершения сборки непрерывной интеграции (CI) в ветви компонентов можно объединить ветвь с основной. В этой статье объясняется, как выполнять команды Git в скриптах сборки Azure Pipelines.

Включение сценариев для выполнения команд Git

Убедитесь, что Git использует удостоверение по умолчанию учетной записи Azure DevOps. При необходимости задайте для пользователя Git первый шаг после выхода.

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

Предоставление разрешений службе сборки

Служба сборки проекта должна иметь разрешения на запись в исходный репозиторий. Задайте необходимые разрешения следующим образом:

  1. В Параметры проекта выберите репозитории в разделе Repos.

  2. На странице "Все репозитории " выберите "Безопасность ", чтобы задать разрешения для всех репозиториев в проекте. Или выберите репозиторий, в который нужно запустить команды Git, а затем выберите "Безопасность " на странице репозитория.

    Снимок экрана, показывающий выбор параметров безопасности для репозиториев.

  3. На странице разрешения пользователей выберите удостоверение службы сборки. Обязательно выберите <project name> Build Service (<organization>) в разделе Users, не учетные записи службы сборки для коллекции проектов. По умолчанию это удостоверение может считывать из репозитория, но не может отправлять в него какие-либо изменения.

  4. Раскройте список и выберите "Разрешить" рядом с каждым разрешением, необходимым для запуска команд Git, которые вы хотите использовать, обычно это Создать ветвь, Вклад, Чтение и Создать тег.

    Снимок экрана, показывающий предоставление идентификациям разрешений к репозиториям.

Разрешить скриптам доступ к системному токену

Чтобы разрешить скриптам доступ к маркеру OAuth GitHub:

Добавьте шаг checkout в ваш конвейер YAML, установив persistCredentials равным true.

steps:
- checkout: self
  persistCredentials: true

Дополнительные сведения о шаге checkout см. в определении steps.checkout .

Очистка локального репозитория

Сборочный конвейер автоматически не очищает определенные типы изменений в локальном репозитории, такие как удаление локальных ветвей или отмена локальных git config изменений. При возникновении проблем с использованием локального агента можно очистить репозиторий перед запуском сборки.

В общем, для ускорения работы самостоятельно размещенных агентов не выполняйте очистку репозитория. Очистка не действует для Microsoft-размещённых агентов, так как они используют каждый раз нового агента. Дополнительные сведения см. в разделе "Очистка локального репозитория" агента.

Чтобы очистить репозиторий перед запуском сборки:

Установите clean на true в шаге checkout. Опция выполняет git clean -ffdx, а затем git reset --hard HEAD перед получением.

steps:
- checkout: self
  clean: true

Выберите переменные в редакторе конвейера, создайте или измените переменную и задайте для нее Build.Clean значение source.

Примеры команд Git

В следующих примерах выполняются команды Git в задаче командной строки и задаче пакетного скрипта .

Перечислите файлы в вашем репозитории

Чтобы получить список файлов в репозитории Git, используйте задачу командной строки в конвейере YAML следующим образом:

- task: CmdLine@2
  inputs:
    script: 'git ls-files'

Объедините фича-ветку с основной веткой

В следующем примере классического конвейера выполняется слияние сборки CI в main случае успешного выполнения сборки.

  1. Создайте файл с именем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
    
  2. На вкладке "Триггеры" в классическом конвейере установите флажок "Включить непрерывную интеграцию".

  3. В разделе "Фильтры ветви" и "Фильтры пути" выберите ветви и пути для включения или исключения из сборки.

  4. Добавьте пакетный скрипт как последнюю задачу в конвейере.

  5. В разделе "Путь " в конфигурации задачи введите расположение и имя файла merge.bat .

Часто задаваемые вопросы

Можно ли запускать команды Git, если удаленный репозиторий находится в GitHub или другой службе Git, например Bitbucket Cloud?

Да, можно запускать команды Git, если удаленный репозиторий находится в GitHub или другой службе Git, например Bitbucket Cloud.

Какие задачи можно использовать для выполнения команд Git?

Для выполнения команд Git можно использовать следующие Azure Pipelines задачи:

Как избежать активации сборки CI при отправке скрипта?

Чтобы избежать активации сборки 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***

Требуется ли агент для запуска конвейеров?

Да, для запуска конвейера сборки или выпуска требуется по крайней мере один агент .

Как устранить неполадки?

См. раздел "Устранение неполадок при запуске конвейера".

Как решить проблему с невозможностью выбора пула агентов по умолчанию или постановки задачи на выполнение в конвейере?

См. статью "Создание пулов агентов и управление ими".

Как исправить ошибку задачи push-отправки NuGet с ошибкой "Ошибка: не удается получить сертификат локального издателя"?

Эту проблему можно устранить, добавив доверенный корневой сертификат. Добавьте NODE_EXTRA_CA_CERTS=file переменную среды в агент сборки или добавьте NODE.EXTRA.CA.CERTS=file переменную задачи в конвейер.

Дополнительные сведения об этой переменной см. в разделе NODE_EXTRA_CA_CERTS=file в документации по Node.js. Инструкции по настройке переменной в конвейере см. в разделе Задание переменных в конвейере.

Почему некоторые из этих функций не отображаются в локальной Azure DevOps Server?

Некоторые из этих функций доступны только в службах Azure DevOps и недоступны для локальных Azure DevOps Server. Некоторые функции доступны только в последней версии Azure DevOps Server.