Skip to main content
We publish frequent updates to our documentation, and translation of this page may still be in progress. For the most current information, please visit the English documentation.

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

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

Примечание. В GitHub Enterprise Server в настоящее время не поддерживаются средства выполнения тестов, размещенные в GitHub. Дополнительные сведения о планируемой поддержке в будущем см. в GitHub public roadmap.

Введение

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 или локальные средства выполнения, и вы можете с помощью меток классифицировать модули выполнения в соответствии с различными атрибутами. Дополнительные сведения см. в разделах Основные сведения о GitHub Actions и Сведения о локальных средствах выполнения.

Использование разделов для упорядочения конвейеров

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 Рабочий процесс GitHub Actions
pipeline {
  agent any
  triggers {
    cron('H/15 * * * 1-5')
  }
}
on:
  schedule:
    - cron: '*/15 * * * 1-5'

Настройка переменных среды в конвейере

Конвейер Jenkins Рабочий процесс GitHub Actions
pipeline {
  agent any
  environment {
    MAVEN_PATH = '/usr/local/maven'
  }
}
jobs:
  maven-build:
    env:
      MAVEN_PATH: '/usr/local/maven'

Выполнение сборки из вышестоящих проектов

Конвейер Jenkins Рабочий процесс GitHub Actions
pipeline {
  triggers {
    upstream(
      upstreamProjects: 'job1,job2',
      threshold: hudson.model.Result.SUCCESS
    )
  }
}
jobs:
  job1:
  job2:
    needs: job1
  job3:
    needs: [job1, job2]

Выполнение сборки с несколькими операционными системами

Конвейер Jenkins Рабочий процесс GitHub Actions
pipeline {
  agent none
  stages {
    stage('Run Tests') {
      matrix {
        axes {
          axis {
            name: 'PLATFORM'
            values: 'macos', 'linux'
          }
        }
        agent { label "${PLATFORM}" }
        stages {
          stage('test') {
            tools { nodejs "node-12" }
            steps {
              dir("scripts/myapp") {
                sh(script: "npm install -g bats")
                sh(script: "bats tests")
              }
            }
          }
        }
      }
    }
  }
}
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@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 12
      - run: npm install -g bats
      - run: bats tests
        working-directory: scripts/myapp