Введение
Azure Pipelines и GitHub Actions позволяют создавать рабочие процессы, которые автоматически строят, тестируют, публикуются, выпускают и развёртают код. Azure Pipelines и GitHub Actions имеют некоторые сходства в конфигурации рабочих процессов:
- Файлы конфигурации рабочего процесса записываются в YAML и хранятся в репозитории кода.
- В рабочем процессе может быть одно или несколько заданий.
- Задания включают один или несколько шагов или отдельных команд.
- Шаги или задачи можно повторно использовать и предоставлять сообществу.
Дополнительные сведения см. в разделе Понимание GitHub Actions.
Основные отличия
При миграции с Azure Pipelines учитывайте следующие различия:
- Azure Pipelines поддерживает устаревший редактор classic editor, который позволяет задавать конфигурацию CI в GUI-редакторе вместо создания конвейера в YAML-файле. GitHub Actions использует файлы YAML для определения рабочих процессов и не поддерживает графический редактор.
- Azure Pipelines позволяет опустить некоторую структуру в определениях заданий. Например, если у вас есть только одно задание, вам не нужно определять само задание, достаточно определить его шаги. GitHub Actions требует явной настройки, и в структуре YAML нельзя делать пропуски.
- Azure Pipelines поддерживает stages определённые в файле YAML, которые можно использовать для создания рабочих процессов развертывания. GitHub Actions требует разделять этапы на отдельные файлы рабочих процессов YAML.
- Локальные агенты сборки Azure Pipelines могут быть выбраны с возможностями. Локальные средства выполнения GitHub Actions можно выбирать с определенными метками.
Миграция заданий и шагов
Вакансии и шаги в Azure Pipelines очень похожи на вакансии и шаги в GitHub Actions. В обеих системах задания имеют следующие характеристики.
- Задания содержат ряд шагов, которые выполняются последовательно.
- Задания выполняются на отдельных виртуальных машинах или в отдельных контейнерах.
- По умолчанию задания выполняются параллельно, но можно настроить их последовательное выполнение.
Миграция шагов скрипта
Скрипт или команду оболочки можно выполнять как шаг рабочего процесса. В Azure Pipelines шаги скрипта можно задать с помощью клавиши script или клавишами bash, powershell или pwsh. Скрипты также можно указать в качестве входных данных задачи Bash или задачи PowerShell.
В GitHub Actions все скрипты указываются с помощью ключа run. Чтобы выбрать конкретную оболочку, можно указать ключ shell при предоставлении скрипта. Дополнительные сведения см. в разделе Синтаксис рабочего процесса для GitHub Actions.
Ниже приведен пример синтаксиса для каждой системы.
Azure Pipelines syntax for script steps
jobs:
- job: scripts
pool:
vmImage: 'windows-latest'
steps:
- script: echo "This step runs in the default shell"
- bash: echo "This step runs in bash"
- pwsh: Write-Host "This step runs in PowerShell Core"
- task: PowerShell@2
inputs:
script: Write-Host "This step runs in PowerShell"
Синтаксис GitHub Actions для шагов скрипта
jobs:
scripts:
runs-on: windows-latest
steps:
- run: echo "This step runs in the default shell"
- run: echo "This step runs in bash"
shell: bash
- run: Write-Host "This step runs in PowerShell Core"
shell: pwsh
- run: Write-Host "This step runs in PowerShell"
shell: powershell
Различия в обработке ошибок скрипта
В Azure Pipelines скрипты могут быть настроены на ошибку, если какой-либо вывод отправляется в stderr. GitHub Actions не поддерживает эту конфигурацию.
GitHub Actions настраивает оболочки для "завершения работы при первой ошибке", когда это возможно, поэтому если одна из команд в скрипте завершает работу с кодом ошибки, это приводит к немедленной остановке скрипта. В отличие от этого, Azure Pipelines требует явной конфигурации для немедленного выхода при ошибке. Дополнительные сведения см. в разделе Синтаксис рабочего процесса для GitHub Actions.
Отличия в стандартной оболочке на Windows
В Azure Pipelines году стандартной оболочкой для скриптов на Windows платформах является Command shell (cmd.exe). В GitHub Actions стандартной оболочкой для скриптов на Windows платформах является PowerShell. PowerShell имеет некоторые различия во встроенных командах, расширении переменных и управлении потоком.
Если вы выполняете простую команду, то можете запустить скрипт командной оболочки в PowerShell без каких-либо изменений. Но в большинстве случаев вам потребуется обновить скрипт с учетом синтаксиса PowerShell или указать GitHub Actions, что скрипт следует запускать с помощью командной оболочки вместо PowerShell. Это можно сделать, задав для shell значение cmd.
Ниже приведен пример синтаксиса для каждой системы.
Синтаксис Azure Pipelines с использованием CMD по умолчанию
jobs:
- job: run_command
pool:
vmImage: 'windows-latest'
steps:
- script: echo "This step runs in CMD on Windows by default"
Синтаксис GitHub Actions для указания CMD
jobs:
run_command:
runs-on: windows-latest
steps:
- run: echo "This step runs in PowerShell on Windows by default"
- run: echo "This step runs in CMD on Windows explicitly"
shell: cmd
Дополнительные сведения см. в разделе Синтаксис рабочего процесса для GitHub Actions.
Миграция условных выражений и синтаксис выражений
Azure Pipelines и GitHub Actions могут выполнять шаги условно. В Azure Pipelines условные выражения задаются с помощью ключа condition. В GitHub Actionsусловные выражения задаются с помощью ключа if.
Azure Pipelines использует функции внутри выражений для условного выполнения шагов. В отличие от этого, GitHub Actions использует нотацию infix. Например, необходимо заменить функцию eq в Azure Pipelines на оператор == в GitHub Actions.
Ниже приведен пример синтаксиса для каждой системы.
Azure Pipelines syntax for conditional expressions
jobs:
- job: conditional
pool:
vmImage: 'ubuntu-latest'
steps:
- script: echo "This step runs with str equals 'ABC' and num equals 123"
condition: and(eq(variables.str, 'ABC'), eq(variables.num, 123))
Синтаксис GitHub Actions для условных выражений
jobs:
conditional:
runs-on: ubuntu-latest
steps:
- run: echo "This step runs with str equals 'ABC' and num equals 123"
if: ${{ env.str == 'ABC' && env.num == 123 }}
Дополнительные сведения см. в разделе Оценка выражений в рабочих процессах и действиях.
Зависимости между заданиями
И Azure Pipelines, и GitHub Actions позволяют задавать зависимости для задачи. В обеих системах задания по умолчанию выполняются параллельно, но зависимости заданий можно указывать явным образом. В Azure Pipelines это делается с помощью клавиши dependsOn. В GitHub Actionsэто делается с помощью ключа needs.
Ниже приведен пример синтаксиса для каждой системы. Рабочие процессы запускают первое задание с именем initial, и после завершения этого задания будут выполняться два задания с именами fanout1 и fanout2. И наконец, после завершения этих заданий, будет выполняться задание fanin.
Синтаксис Azure Pipelines для зависимостей между работами
jobs:
- job: initial
pool:
vmImage: 'ubuntu-latest'
steps:
- script: echo "This job will be run first."
- job: fanout1
pool:
vmImage: 'ubuntu-latest'
dependsOn: initial
steps:
- script: echo "This job will run after the initial job, in parallel with fanout2."
- job: fanout2
pool:
vmImage: 'ubuntu-latest'
dependsOn: initial
steps:
- script: echo "This job will run after the initial job, in parallel with fanout1."
- job: fanin
pool:
vmImage: 'ubuntu-latest'
dependsOn: [fanout1, fanout2]
steps:
- script: echo "This job will run after fanout1 and fanout2 have finished."
Синтаксис GitHub Actions для зависимостей между заданиями
jobs:
initial:
runs-on: ubuntu-latest
steps:
- run: echo "This job will be run first."
fanout1:
runs-on: ubuntu-latest
needs: initial
steps:
- run: echo "This job will run after the initial job, in parallel with fanout2."
fanout2:
runs-on: ubuntu-latest
needs: initial
steps:
- run: echo "This job will run after the initial job, in parallel with fanout1."
fanin:
runs-on: ubuntu-latest
needs: [fanout1, fanout2]
steps:
- run: echo "This job will run after fanout1 and fanout2 have finished."
Дополнительные сведения см. в разделе Синтаксис рабочего процесса для GitHub Actions.
Миграция задач в действия
Azure Pipelines использует tasks — это компоненты приложения, которые можно повторно использовать в нескольких рабочих процессах. GitHub Actions использует действия, которые можно использовать для выполнения задач и настройки рабочего процесса. В обеих системах можно указать имя задачи или действия для выполнения, а также все необходимые входные данные в виде пар "ключ-значение".
Ниже приведен пример синтаксиса для каждой системы.
Azure Pipelines syntax for tasks
jobs:
- job: run_python
pool:
vmImage: 'ubuntu-latest'
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.7'
architecture: 'x64'
- script: python script.py
Синтаксис GitHub Actions для действий
jobs:
run_python:
runs-on: ubuntu-latest
steps:
- uses: actions/setup-python@v5
with:
python-version: '3.7'
architecture: 'x64'
- run: python script.py
Вы можете найти действия для использования в рабочих процессах в GitHub Marketplace или создать свои собственные действия. Дополнительные сведения см. в разделе Повторное выполнение автоматизации.