Skip to main content

Миграция с Jenkins на GitHub Actions

GitHub Actions и Jenkins имеют несколько сходств в конфигурации, что делает миграцию на GitHub Actions относительно простой.

Введение

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.

Директивы JenkinsGitHub Actions
agentjobs.<job_id>.runs-on
jobs.<job_id>.container
postнет
stagesjobs
stepsjobs.<job_id>.steps

Директивы using

Jenkins использует директивы для управления декларативными конвейерами. Эти директивы определяют характеристики рабочего процесса и порядок его выполнения. В приведенной ниже таблице показано, как эти директивы соответствуют концепциям в GitHub Actions.

Директивы JenkinsGitHub Actions
environmentjobs.<job_id>.env
jobs.<job_id>.steps[*].env
optionsjobs.<job_id>.strategy
jobs.<job_id>.strategy.fail-fast
jobs.<job_id>.timeout-minutes
parametersinputs
outputs
triggerson
on.<event_name>.types
on.<push>.<branches|tags>
on.<pull_request>.<branches>
on.<push|pull_request>.paths
triggers { upstreamprojects() }jobs.<job_id>.needs
Синтаксис cron в Jenkinson.schedule
stagejobs.<job_id>
jobs.<job_id>.name
toolsСпецификации для GitHubразмещенных средств выполнения
inputinputs
whenjobs.<job_id>.if

Использование последовательных этапов

Обработка параллельных заданий

Jenkins может выполнять stages и steps параллельно, в то время как GitHub Actions в настоящее время выполняет задания только параллельно.

Параллельное выполнение в JenkinsGitHub Actions
paralleljobs.<job_id>.strategy.max-parallel

«Матрица»

И GitHub Actions, и Jenkins позволяют использовать матрицу сборки для определения различных системных сочетаний.

JenkinsGitHub Actions
axisstrategy/matrix
context
stagessteps-context
excludesнет

Выполнение задач с помощью шагов

Jenkins группирует steps в stages. Каждый из этих шагов может быть, помимо прочего, скриптом, функцией или командой. Аналогично, GitHub Actions использует jobs для выполнения определенных групп steps.

JenkinsGitHub Actions
stepsjobs.<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