Введение
Jenkins и GitHub Actions позволяют создавать рабочие процессы, которые автоматически выполняют сборку, тестирование, публикацию, выпуск и развертывание кода. Jenkins и GitHub Actions используют некоторые сходства в конфигурации рабочего процесса.
- Jenkins создает рабочие процессы с помощью декларативных конвейеров, которые аналогичны файлам рабочих процессов GitHub Actions.
- Jenkins использует этапы для выполнения коллекции шагов, а GitHub Actions использует задания для группирования одного или нескольких шагов или отдельных команд.
- Jenkins и GitHub Actions поддерживают сборки на основе контейнеров. Дополнительные сведения см. в разделе Создание действия контейнера Docker.
- Шаги или задачи можно повторно использовать и предоставлять сообществу.
Дополнительные сведения см. в разделе Общие сведения о GitHub Actions.
Основные отличия
- Jenkins имеет два типа синтаксиса для создания конвейеров: декларативный конвейер и конвейер со скриптами. GitHub Actions использует YAML для создания рабочих процессов и файлов конфигурации. Дополнительные сведения см. в разделе Синтаксис рабочего процесса для GitHub Actions.
- Развертывания Jenkins обычно являются локальными, при этом пользователи обслуживают серверы в своих центрах обработки данных. GitHub Actions предлагает гибридный облачный подход, размещая собственные средства выполнения, которые можно использовать для выполнения заданий, а также поддерживая локальные средства выполнения. Дополнительные сведения см. в разделе О самостоятельно размещенных средствах выполнения.
Сравнение возможностей
Распространение сборок
Jenkins позволяет отправлять сборки одному агенту сборки или распределять их между несколькими агентами. Вы также можете классифицировать эти агенты в соответствии с различными атрибутами, такими как типы операционных систем.
Аналогично, GitHub Actions может отправлять задания в размещенные в GitHub или локальные средства выполнения, и вы можете с помощью меток классифицировать модули выполнения в соответствии с различными атрибутами. Дополнительные сведения см. в разделе [AUTOTITLE и Общие сведения о GitHub Actions](/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners).
Использование разделов для упорядочения конвейеров
Jenkins разделяет свои декларативные конвейеры на несколько разделов. Аналогично, GitHub Actions упорядочивает рабочие процессы по отдельным разделам. В приведенной ниже таблице сравниваются разделы Jenkins с рабочим процессом GitHub Actions.
Директивы Jenkins | GitHub Actions |
---|---|
agent | jobs.<job_id>.runs-on jobs.<job_id>.container |
post | нет |
stages | jobs |
steps | jobs.<job_id>.steps |
Директивы using
Jenkins использует директивы для управления декларативными конвейерами. Эти директивы определяют характеристики рабочего процесса и порядок его выполнения. В приведенной ниже таблице показано, как эти директивы соответствуют концепциям в GitHub Actions.
Использование последовательных этапов
Обработка параллельных заданий
Jenkins может выполнять stages
и steps
параллельно, в то время как GitHub Actions в настоящее время выполняет задания только параллельно.
Параллельное выполнение в Jenkins | GitHub Actions |
---|---|
parallel | jobs.<job_id>.strategy.max-parallel |
«Матрица»
И GitHub Actions, и Jenkins позволяют использовать матрицу сборки для определения различных системных сочетаний.
Jenkins | GitHub Actions |
---|---|
axis | strategy/matrix context |
stages | steps-context |
excludes | нет |
Выполнение задач с помощью шагов
Jenkins группирует steps
в stages
. Каждый из этих шагов может быть, помимо прочего, скриптом, функцией или командой. Аналогично, GitHub Actions использует jobs
для выполнения определенных групп steps
.
Jenkins | GitHub Actions |
---|---|
steps | jobs.<job_id>.steps |
Примеры распространенных задач
Планирование запуска конвейера с помощью cron
Конвейер Jenkins с cron
pipeline {
agent any
triggers {
cron('H/15 * * * 1-5')
}
}
Рабочий процесс GitHub Actions с cron
on:
schedule:
- cron: '*/15 * * * 1-5'
Настройка переменных среды в конвейере
Конвейер Jenkins с переменной среды
pipeline {
agent any
environment {
MAVEN_PATH = '/usr/local/maven'
}
}
Рабочий процесс GitHub Actions с переменной среды
jobs:
maven-build:
env:
MAVEN_PATH: '/usr/local/maven'
Выполнение сборки из вышестоящих проектов
Конвейер Jenkins, который строится из вышестоящего проекта
pipeline {
triggers {
upstream(
upstreamProjects: 'job1,job2',
threshold: hudson.model.Result.SUCCESS
)
}
}
Рабочий процесс GitHub Actions, который создается из вышестоящего проекта
jobs:
job1:
job2:
needs: job1
job3:
needs: [job1, job2]
Выполнение сборки с несколькими операционными системами
Конвейер Jenkins, который строится с несколькими операционными системами
pipeline {
agent none
stages {
stage('Run Tests') {
matrix {
axes {
axis {
name: 'PLATFORM'
values: 'macos', 'linux'
}
}
agent { label "${PLATFORM}" }
stages {
stage('test') {
tools { nodejs "node-16" }
steps {
dir("scripts/myapp") {
sh(script: "npm install -g bats")
sh(script: "bats tests")
}
}
}
}
}
}
}
}
Рабочий процесс GitHub Actions для сборки с несколькими операционными системами
name: demo-workflow
on:
push:
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [macos-latest, ubuntu-latest]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 16
- run: npm install -g bats
- run: bats tests
working-directory: ./scripts/myapp