{"meta":{"title":"Jenkins から GitHub Actions への移行","intro":"GitHub ActionsとJenkinsには複数の相似点があり、そのためGitHub Actionsへの移行は比較的単純です。","product":"GitHub Actions","breadcrumbs":[{"href":"/ja/actions","title":"GitHub Actions"},{"href":"/ja/actions/tutorials","title":"チュートリアル"},{"href":"/ja/actions/tutorials/migrate-to-github-actions","title":"GitHub Actions に移行する"},{"href":"/ja/actions/tutorials/migrate-to-github-actions/manual-migrations","title":"手動移行"},{"href":"/ja/actions/tutorials/migrate-to-github-actions/manual-migrations/migrate-from-jenkins","title":"Jenkins からの移行"}],"documentType":"article"},"body":"# Jenkins から GitHub Actions への移行\n\nGitHub ActionsとJenkinsには複数の相似点があり、そのためGitHub Actionsへの移行は比較的単純です。\n\n## はじめに\n\nJenkinsとGitHub Actionsは、どちらも自動的にコードのビルド、テスト、公開、リリース、デプロイを行うワークフローを作成できます。 JenkinsとGitHub Actionsは、ワークフローの設定において似ているところがあります。\n\n* Jenkins では *宣言的パイプライン* を使ってワークフローが作成されます。これは GitHub Actions のワークフロー ファイルに似ています。\n* Jenkins では *ステージ* を使ってステップの集合が実行されますが、GitHub Actions では 1 つ以上のステップまたは個別のコマンドをグループ化するのにジョブを使います。\n* JenkinsとGitHub Actionsはコンテナベースのビルドをサポートします。 詳しくは、「[Docker コンテナーのアクションを作成する](/ja/actions/creating-actions/creating-a-docker-container-action)」をご覧ください。\n* ステップもしくはタスクは、再利用とコミュニティとの共有が可能です。\n\n詳しくは、「[GitHub Actionsについて](/ja/actions/learn-github-actions/understanding-github-actions)」をご覧ください。\n\n## 主要な相違点\n\n* Jenkinsには、パイプラインの作成用の構文として、宣言的パイプラインとスクリプトパイプラインの2種類があります。 GitHub Actionsは、ワークフローと設定ファイルの作成にYAMLを使います。 詳しくは、「[GitHub Actions　のワークフロー構文](/ja/actions/using-workflows/workflow-syntax-for-github-actions)」をご覧ください。\n* Jenkinsのデプロイメントは通常セルフホストであり、ユーザが自身のデータセンター内のサーバーをメンテナンスします。 GitHub Actionsは、ジョブの実行に利用できる独自のランナーをホストするハイブリッドクラウドのアプローチを提供しながら、セルフホストランナーもサポートします。 詳しくは、「[セルフホステッド ランナー](/ja/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners)」をご覧ください。\n\n## 機能の比較\n\n### ビルドの配布\n\nJenkinsでは、ビルドを単一のビルドエージェントに送信することも、複数のエージェントに対して分配することもできます。 それらのエージェントを、オペレーティングシステムの種類などの様々な属性に従って分類することもできます。\n\n同様に、GitHub Actions はジョブを GitHub ホストまたはセルフホストランナーに送信でき、ラベルを使用してさまざまな属性に従ってランナーを分類できます。 詳細については、「[GitHub Actionsについて](/ja/actions/learn-github-actions/understanding-github-actions#runners)」および「[セルフホステッド ランナー](/ja/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners)」を参照してください。\n\n### セクションによるパイプラインの整理\n\nJenkinsは、宣言的パイプラインを複数のセクションに分割します。 同様に、GitHub Actions はワークフローを個別のセクションに編成します。 以下の表は、JenkinsのセクションをGitHub Actionsのワークフローと比較しています。\n\n| Jenkinsのディレクティブ                                                 | GitHub Actions                                                                                                                                                                                                                   |\n| --------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [`agent`](https://jenkins.io/doc/book/pipeline/syntax/#agent)   | [`jobs.<job_id>.runs-on`](/ja/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on) <br> [`jobs.<job_id>.container`](/ja/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idcontainer) |\n| [`post`](https://jenkins.io/doc/book/pipeline/syntax/#post)     | なし                                                                                                                                                                                                                               |\n| [`stages`](https://jenkins.io/doc/book/pipeline/syntax/#stages) | [`jobs`](/ja/actions/using-workflows/workflow-syntax-for-github-actions#jobs)                                                                                                                                                    |\n| [`steps`](https://jenkins.io/doc/book/pipeline/syntax/#steps)   | [`jobs.<job_id>.steps`](/ja/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idsteps)                                                                                                                          |\n\n## ディレクティブの使用\n\nJenkins では、*宣言的パイプライン* を管理するためにディレクティブを使います。 それらのディレクティブは、ワークフローの特徴と、その実行方法を定義します。 以下の表は、それらのディレクティブがGitHub Actionsの概念とどのように対応するかを示しています。\n\n| Jenkinsのディレクティブ                                                                            | GitHub Actions                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |\n| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [`environment`](https://jenkins.io/doc/book/pipeline/syntax/#environment)                  | [`jobs.<job_id>.env`](/ja/actions/using-workflows/workflow-syntax-for-github-actions#env) <br> [`jobs.<job_id>.steps[*].env`](/ja/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsenv)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |\n| [`options`](https://jenkins.io/doc/book/pipeline/syntax/#options)                          | [`jobs.<job_id>.strategy`](/ja/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategy) <br> [`jobs.<job_id>.strategy.fail-fast`](/ja/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategyfail-fast) <br> [`jobs.<job_id>.timeout-minutes`](/ja/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idtimeout-minutes)                                                                                                                                                                                                                                                                                                                                                                                                                    |\n| [`parameters`](https://jenkins.io/doc/book/pipeline/syntax/#options)                       | [`inputs`](/ja/actions/creating-actions/metadata-syntax-for-github-actions#inputs) <br> [`outputs`](/ja/actions/creating-actions/metadata-syntax-for-github-actions#outputs-for-docker-container-and-javascript-actions)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |\n| [`triggers`](https://jenkins.io/doc/book/pipeline/syntax/#triggers)                        | [`on`](/ja/actions/using-workflows/workflow-syntax-for-github-actions#on) <br> [`on.<event_name>.types`](/ja/actions/using-workflows/workflow-syntax-for-github-actions#onevent_nametypes) <br> [<code>on.\\<push>.\\<branches\\|tags></code>](/ja/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#onpushbranchestagsbranches-ignoretags-ignore) <br> [<code>on.\\<pull\\_request>.\\<branches></code>](/ja/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#onpull_requestpull_request_targetbranchesbranches-ignore) <br> [<code>on.\\<push\\|pull\\_request>.paths</code>](/ja/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#onpushpull_requestpull_request_targetpathspaths-ignore) |\n| [`triggers { upstreamprojects() }`](https://jenkins.io/doc/book/pipeline/syntax/#triggers) | [`jobs.<job_id>.needs`](/ja/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idneeds)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |\n| [Jenkins の cron 構文](https://jenkins.io/doc/book/pipeline/syntax/#cron-syntax)              | [`on.schedule`](/ja/actions/using-workflows/workflow-syntax-for-github-actions#onschedule)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |\n| [`stage`](https://jenkins.io/doc/book/pipeline/syntax/#stage)                              | [`jobs.<job_id>`](/ja/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_id) <br> [`jobs.<job_id>.name`](/ja/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idname)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |\n| [`tools`](https://jenkins.io/doc/book/pipeline/syntax/#tools)                              | [GitHub ホステッド ランナーの仕様](/ja/actions/using-github-hosted-runners/about-github-hosted-runners#supported-software)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |\n| [`input`](https://jenkins.io/doc/book/pipeline/syntax/#input)                              | [`inputs`](/ja/actions/creating-actions/metadata-syntax-for-github-actions#inputs)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |\n| [`when`](https://jenkins.io/doc/book/pipeline/syntax/#when)                                | [`jobs.<job_id>.if`](/ja/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idif)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |\n\n## 連続段階の利用\n\n### 並列なジョブの処理\n\nJenkins は `stages` と `steps` を並列に実行できますが、GitHub Actions が並列に実行できるのは現時点ではジョブだけです。\n\n| Jenkinsの並列処理                                                        | GitHub Actions                                                                                                                         |\n| ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |\n| [`parallel`](https://jenkins.io/doc/book/pipeline/syntax/#parallel) | [`jobs.<job_id>.strategy.max-parallel`](/ja/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategymax-parallel) |\n\n### Matrix\n\nGitHub Actions と Jenkins はどちらも、マトリックスを使ってさまざまなシステムの組み合わせを定義できます。\n\n| Jenkins                                                                  | GitHub Actions                                                                                                                                    |\n| ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [`axis`](https://jenkins.io/doc/book/pipeline/syntax/#matrix-axes)       | [`strategy/matrix`](/ja/actions/using-workflows/about-workflows#using-a-build-matrix) <br> [`context`](/ja/actions/learn-github-actions/contexts) |\n| [`stages`](https://jenkins.io/doc/book/pipeline/syntax/#matrix-stages)   | [`steps-context`](/ja/actions/learn-github-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`](/ja/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idsteps) |\n\n## 一般的なタスクの例\n\n###\n\n```\n          `cron` で実行するパイプラインのスケジュール設定\n```\n\n####\n\n```\n          `cron` を含む Jenkins パイプライン\n```\n\n```yaml\npipeline {\n  agent any\n  triggers {\n    cron('H/15 * * * 1-5')\n  }\n}\n```\n\n####\n\n```\n          `cron` を含む GitHub Actions ワークフロー\n```\n\n```yaml\non:\n  schedule:\n    - cron: '*/15 * * * 1-5'\n```\n\n```\n          `schedule` イベントと使用できる cron 構文の詳細については、「[AUTOTITLE](/actions/reference/workflows-and-actions/events-that-trigger-workflows#schedule)」を参照してください。\n```\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 ワークフロー\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@v5\n      - uses: actions/setup-node@v4\n        with:\n          node-version: 20\n      - run: npm install -g bats\n      - run: bats tests\n        working-directory: ./scripts/myapp\n```"}