{"meta":{"title":"Переход с Jenkins на GitHub Actions","intro":"GitHub Actions и Дженкинс имеют множество сходств, что делает миграцию относительно GitHub Actions простой.","product":"GitHub Actions","breadcrumbs":[{"href":"/ru/actions","title":"GitHub Actions"},{"href":"/ru/actions/tutorials","title":"Учебники"},{"href":"/ru/actions/tutorials/migrate-to-github-actions","title":"Миграция на GitHub Actions"},{"href":"/ru/actions/tutorials/migrate-to-github-actions/manual-migrations","title":"Миграция вручную"},{"href":"/ru/actions/tutorials/migrate-to-github-actions/manual-migrations/migrate-from-jenkins","title":"Миграция из Jenkins"}],"documentType":"article"},"body":"# Переход с Jenkins на GitHub Actions\n\nGitHub Actions и Дженкинс имеют множество сходств, что делает миграцию относительно GitHub Actions простой.\n\n## Введение\n\nJenkins и GitHub Actions оба позволяют создавать рабочие процессы, которые автоматически создают, тестируют, публикуются, выпускают и размещают код. Дженкинс и GitHub Actions разделяет некоторые сходства в конфигурации рабочих процессов:\n\n* Jenkins создаёт рабочие процессы с использованием *декларативных конвейеров*, которые похожи на GitHub Actions файлы рабочих процессов.\n* Jenkins использует *этапы* для выполнения набора шагов, а GitHub Actions задания — для группировки одного или нескольких шагов или отдельных команд.\n* Jenkins и GitHub Actions поддерживают сборки на основе контейнеров. Дополнительные сведения см. в разделе [Создание действия контейнера Docker](/ru/actions/tutorials/use-containerized-services/create-a-docker-container-action).\n* Шаги или задачи можно повторно использовать и предоставлять сообществу.\n\nДополнительные сведения см. в разделе [Понимание GitHub Actions](/ru/actions/get-started/understand-github-actions).\n\n## Основные отличия\n\n* Jenkins имеет два типа синтаксиса для создания конвейеров: декларативный конвейер и конвейер со скриптами.\n  GitHub Actions использует YAML для создания рабочих процессов и конфигурационных файлов. Дополнительные сведения см. в разделе [Синтаксис рабочего процесса для GitHub Actions](/ru/actions/reference/workflows-and-actions/workflow-syntax).\n* Развертывания Jenkins обычно являются локальными, при этом пользователи обслуживают серверы в своих центрах обработки данных.\n  GitHub Actions предлагает гибридный облачный подход, размещая собственные раннеры, которые можно использовать для выполнения задач, а также поддерживая самостоятельные бегунки. Дополнительные сведения см. в разделе [Локальные средства выполнения тестов](/ru/actions/concepts/runners/self-hosted-runners).\n\n## Сравнение возможностей\n\n### Распространение сборок\n\nJenkins позволяет отправлять сборки одному агенту сборки или распределять их между несколькими агентами. Вы также можете классифицировать эти агенты в соответствии с различными атрибутами, такими как типы операционных систем.\n\nАналогично, GitHub Actions можно отправлять задания - GitHubhosted или самостоятельно размещенным бегунам, а также использовать метки для классификации бегунов по различным атрибутам. Дополнительные сведения см. в разделе \\[AUTOTITLE и [Понимание GitHub Actions](/ru/actions/get-started/understand-github-actions#runners)]\\(/actions/concepts/runners/self-hosted-runners).\n\n### Использование разделов для упорядочения конвейеров\n\nJenkins разделяет свои декларативные конвейеры на несколько разделов. Аналогично, GitHub Actions он организует свои рабочие процессы в отдельные секции. Таблица ниже сравнивает разделы Дженкинса с рабочим GitHub Actions процессом.\n\n| Директивы Jenkins                                               | GitHub Actions                                                                                                                                                                                                             |\n| --------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [`agent`](https://jenkins.io/doc/book/pipeline/syntax/#agent)   | [`jobs.<job_id>.runs-on`](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idruns-on) <br> [`jobs.<job_id>.container`](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idcontainer) |\n| [`post`](https://jenkins.io/doc/book/pipeline/syntax/#post)     | нет                                                                                                                                                                                                                        |\n| [`stages`](https://jenkins.io/doc/book/pipeline/syntax/#stages) | [`jobs`](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobs)                                                                                                                                                 |\n| [`steps`](https://jenkins.io/doc/book/pipeline/syntax/#steps)   | [`jobs.<job_id>.steps`](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idsteps)                                                                                                                       |\n\n## Директивы using\n\nJenkins использует директивы для управления *декларативными конвейерами*. Эти директивы определяют характеристики рабочего процесса и порядок его выполнения. Таблица ниже демонстрирует, как эти директивы соответствуют понятиям внутри GitHub Actions.\n\n| Директивы Jenkins                                                                                                                                        | GitHub Actions                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |\n| -------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [`environment`](https://jenkins.io/doc/book/pipeline/syntax/#environment)                                                                                | [`jobs.<job_id>.env`](/ru/actions/reference/workflows-and-actions/workflow-syntax#env) <br> [`jobs.<job_id>.steps[*].env`](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstepsenv)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |\n| [`options`](https://jenkins.io/doc/book/pipeline/syntax/#options)                                                                                        | [`jobs.<job_id>.strategy`](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategy) <br> [`jobs.<job_id>.strategy.fail-fast`](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategyfail-fast) <br> [`jobs.<job_id>.timeout-minutes`](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idtimeout-minutes)                                                                                                                                                                                                                                                                                                                       |\n| [`parameters`](https://jenkins.io/doc/book/pipeline/syntax/#options)                                                                                     | [`inputs`](/ru/actions/reference/workflows-and-actions/metadata-syntax#inputs) <br> [`outputs`](/ru/actions/reference/workflows-and-actions/metadata-syntax#outputs-for-docker-container-and-javascript-actions)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |\n| [`triggers`](https://jenkins.io/doc/book/pipeline/syntax/#triggers)                                                                                      | [`on`](/ru/actions/reference/workflows-and-actions/workflow-syntax#on) <br> [`on.<event_name>.types`](/ru/actions/reference/workflows-and-actions/workflow-syntax#onevent_nametypes) <br> [<code>on.\\<push>.\\<branches\\|tags></code>](/ru/actions/reference/workflows-and-actions/workflow-syntax#onpushbranchestagsbranches-ignoretags-ignore) <br> [<code>on.\\<pull\\_request>.\\<branches></code>](/ru/actions/reference/workflows-and-actions/workflow-syntax#onpull_requestpull_request_targetbranchesbranches-ignore) <br> [<code>on.\\<push\\|pull\\_request>.paths</code>](/ru/actions/reference/workflows-and-actions/workflow-syntax#onpushpull_requestpull_request_targetpathspaths-ignore) |\n| [`triggers { upstreamprojects() }`](https://jenkins.io/doc/book/pipeline/syntax/#triggers)                                                               | [`jobs.<job_id>.needs`](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idneeds)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |\n| [Синтаксис cron в Jenkins](https://jenkins.io/doc/book/pipeline/syntax/#cron-syntax)                                                                     | [`on.schedule`](/ru/actions/reference/workflows-and-actions/workflow-syntax#onschedule)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |\n| [`stage`](https://jenkins.io/doc/book/pipeline/syntax/#stage)                                                                                            | [`jobs.<job_id>`](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_id) <br> [`jobs.<job_id>.name`](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idname)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |\n| [`tools`](https://jenkins.io/doc/book/pipeline/syntax/#tools)                                                                                            |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |\n| [Технические характеристики для GitHub-hosted бегунов](/ru/actions/concepts/runners/github-hosted-runners#preinstalled-software-for-github-owned-images) |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |\n| [`input`](https://jenkins.io/doc/book/pipeline/syntax/#input)                                                                                            | [`inputs`](/ru/actions/reference/workflows-and-actions/metadata-syntax#inputs)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |\n| [`when`](https://jenkins.io/doc/book/pipeline/syntax/#when)                                                                                              | [`jobs.<job_id>.if`](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idif)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |\n\n## Использование последовательных этапов\n\n### Обработка параллельных заданий\n\nДженкинс может запускать и `stages``steps` параллельно.\nGitHub Actions выполняет задачи параллельно, а также может одновременно выполнять шаги внутри задания с использованием синтаксиса на уровне шагов. Для получения дополнительной информации см. [Синтаксис рабочего процесса для GitHub Actions](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstepsbackground).\n\n| Параллельное выполнение в Jenkins                                   | GitHub Actions                                                                                                                      |\n| ------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |\n| [`parallel`](https://jenkins.io/doc/book/pipeline/syntax/#parallel) | [`jobs.<job_id>.strategy.max-parallel`](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategymax-parallel) |\n\n### «Матрица»\n\nОба и Jenkins GitHub Actions позволяют использовать матрицу для определения различных комбинаций систем.\n\n| Jenkins                                                                  | GitHub Actions                                                                                                                                                                                      |\n| ------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [`axis`](https://jenkins.io/doc/book/pipeline/syntax/#matrix-axes)       | [`strategy/matrix`](/ru/actions/how-tos/write-workflows/choose-what-workflows-do/run-job-variations#about-matrix-strategies) <br> [`context`](/ru/actions/reference/workflows-and-actions/contexts) |\n| [`stages`](https://jenkins.io/doc/book/pipeline/syntax/#matrix-stages)   | [`steps-context`](/ru/actions/reference/workflows-and-actions/contexts#steps-context)                                                                                                               |\n| [`excludes`](https://jenkins.io/doc/book/pipeline/syntax/#matrix-stages) | нет                                                                                                                                                                                                 |\n\n### Выполнение задач с помощью шагов\n\nJenkins группирует `steps` в `stages`. Каждый из этих шагов может быть, помимо прочего, скриптом, функцией или командой. Аналогично, GitHub Actions используется `jobs` для выполнения определённых групп `steps`.\n\n| Jenkins                                                       | GitHub Actions                                                                                       |\n| ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |\n| [`steps`](https://jenkins.io/doc/book/pipeline/syntax/#steps) | [`jobs.<job_id>.steps`](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idsteps) |\n\n## Примеры распространенных задач\n\n### Планирование запуска конвейера с помощью `cron`\n\n#### Конвейер Jenkins с `cron`\n\n```yaml\npipeline {\n  agent any\n  triggers {\n    cron('H/15 * * * 1-5')\n  }\n}\n```\n\n#### GitHub Actions Рабочий процесс с `cron`\n\n```yaml\non:\n  schedule:\n    - cron: '*/15 * * * 1-5'\n```\n\nДополнительные сведения о `schedule` событиях и принятом синтаксисе cron см. в разделе [События, инициирующие рабочие процессы](/ru/actions/reference/workflows-and-actions/events-that-trigger-workflows#schedule).\n\n### Настройка переменных среды в конвейере\n\n#### Конвейер Jenkins с переменной среды\n\n```yaml\npipeline {\n  agent any\n  environment {\n    MAVEN_PATH = '/usr/local/maven'\n  }\n}\n```\n\n#### GitHub Actions Рабочий процесс с переменной среды\n\n```yaml\njobs:\n  maven-build:\n    env:\n      MAVEN_PATH: '/usr/local/maven'\n```\n\n### Выполнение сборки из вышестоящих проектов\n\n#### Конвейер Jenkins, который строится из вышестоящего проекта\n\n```yaml\npipeline {\n  triggers {\n    upstream(\n      upstreamProjects: 'job1,job2',\n      threshold: hudson.model.Result.SUCCESS\n    )\n  }\n}\n```\n\n#### GitHub Actions Рабочий процесс, который строится на основе upstream-проекта\n\n```yaml\njobs:\n  job1:\n  job2:\n    needs: job1\n  job3:\n    needs: [job1, job2]\n```\n\n### Выполнение сборки с несколькими операционными системами\n\n#### Конвейер Jenkins, который строится с несколькими операционными системами\n\n```yaml\npipeline {\n  agent none\n  stages {\n    stage('Run Tests') {\n      matrix {\n        axes {\n          axis {\n            name: 'PLATFORM'\n            values: 'macos', 'linux'\n          }\n        }\n        agent { label \"${PLATFORM}\" }\n        stages {\n          stage('test') {\n            tools { nodejs \"node-20\" }\n            steps {\n              dir(\"scripts/myapp\") {\n                sh(script: \"npm install -g bats\")\n                sh(script: \"bats tests\")\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n```\n\n#### GitHub Actions Рабочий процесс, который строится на нескольких операционных системах\n\n```yaml\nname: demo-workflow\non:\n  push:\njobs:\n  test:\n    runs-on: ${{ matrix.os }}\n    strategy:\n      fail-fast: false\n      matrix:\n        os: [macos-latest, ubuntu-latest]\n    steps:\n      - uses: actions/checkout@v6\n      - uses: actions/setup-node@v7\n        with:\n          node-version: 20\n      - run: npm install -g bats\n      - run: bats tests\n        working-directory: ./scripts/myapp\n```"}