Поделиться через


Выполнение команд Git в скриптах конвейера

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

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

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

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

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

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

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

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

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

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

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

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

    Снимок экрана: предоставление удостоверений репозиториям разрешений.

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

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

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

steps:
- checkout: self
  persistCredentials: true

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

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

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

Как правило, для повышения производительности локальных агентов не очищайте репозиторий. Очистка не действует для агентов, размещенных корпорацией Майкрософт, так как они используют новый агент каждый раз. Дополнительные сведения см. в разделе "Очистка локального репозитория" агента.

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

Установите значение cleantrue на шаге 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 Services и недоступны для локального сервера Azure DevOps Server. Некоторые функции доступны только в последней версии Azure DevOps Server.