Skip to main content
ドキュメントには� �繁に更新が� えられ、その都度公開されています。本ページの翻訳はま� 未完成な部分があることをご了承く� さい。最新の情� �については、英語のドキュメンテーションをご参照く� さい。本ページの翻訳に問題がある� �合はこちらまでご連絡く� さい。

このバージョンの GitHub Enterprise はこの日付をもって終了となりました: 2022-06-03. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの改善、新機能のためには、最新バージョンのGitHub Enterpriseにアップグレードしてく� さい。 アップグレードに関する支援については、GitHub Enterprise supportに連絡してく� さい。

JenkinsからGitHub Actionsへの移行

GitHub ActionsとJenkinsには複数の相似点があり、そのためGitHub Actionsへの移行は比較的単純です。

ノート: GitHubホストランナーは、現在GitHub Enterprise Serverでサポートされていません。 GitHubパブリックロードマップで、計画されている将来のサポートに関する詳しい情� �を見ることができます。

はじめに

JenkinsとGitHub Actionsは、どちらも自動的にコードのビルド、テスト、公開、リリース、デプロイを行うワークフローを作成できます。 JenkinsとGitHub Actionsは、ワークフローの設定において似ているところがあります。

  • Jenkinsは宣言的パイプラインを使ってワークフローを作成します。これはGitHub Actionsのワークフローファイルに似ています。
  • Jenkinsはステージを使ってステップの集合を実行しますが、GitHub Actionsは1つ以上のステップもしくは個別のコマンドをグループ化するのにジョブを使います。
  • JenkinsとGitHub Actionsはコンテナベースのビルドをサポートします。 詳しい情� �については「Docker コンテナアクションを作成する」を参照してく� さい。
  • ステップもしくはタスクは、再利用とコミュニティとの共有が可能です。

詳しい情� �については、「GitHub Actionsの中� �的概念」を参照してく� さい。

主要な差異

  • Jenkinsには、パイプラインの作成用の構文として、宣言的パイプラインとスクリプトパイプラインの2種類があります。 GitHub Actionsは、ワークフローと設定ファイルの作成にYAMLを使います。 詳しい情� �については、「GitHub Actionsのワークフロー構文」を参照してく� さい。
  • Jenkinsのデプロイメントは通常セルフホストであり、ユーザが自身のデータセンター内のサーバーをメンテナンスします。 GitHub Actionsは、ジョブの実行に利用できる独自のランナーをホストするハイブリッドクラウドのアプローチを提供しながら、セルフホストランナーもサポートします。 詳しい情� �については「セルフホストランナーについて」を参照してく� さい。

機能の比較

ビルドの分配

Jenkinsでは、ビルドを単一のビルドエージェントに送信することも、複数のエージェントに対して分配することもできます。 それらのエージェントを、オペレーティングシステ� の種類などの様々な属性に従って分類することもできます。

同様に、GitHub Actions はジョブを GitHub ホストまたはセルフホストランナーに送信でき、ラベルを使用してさまざまな属性に従ってランナーを分類できます。 For more information, see "Understanding GitHub Actions" and "About self-hosted runners."

セクションを利用したパイプラインの整理

Jenkinsは、宣言的パイプラインを複数のセクションに分割します。 同様に、GitHub Actions はワークフローを個別のセクションに編成します。 以下の表は、JenkinsのセクションをGitHub Actionsのワークフローと比較しています。

JenkinsのディレクティブGitHub Actions
agentjobs.<job_id>.runs-on
jobs.<job_id>.container
post
stagesjobs
stepsjobs.<job_id>.steps

ディレクティブの利用

Jenkinsは、宣言的パイプラインを管理するためにディレクティブを使います。 それらのディレクティブは、ワークフローの特徴と、その実行方法を定義します。 以下の表は、それらのディレクティブがGitHub Actionsの概念とどのように対応するかを示しています。

JenkinsのディレクティブGitHub 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
Jenkinsのcron構文on.schedule
ステージjobs.<job_id>
jobs.<job_id>.name
tools
Specifications for GitHub-hosted runners
inputinputs
whenjobs.<job_id>.if

シーケンシャルなステージの利用

並列なジョブの処理

Jenkinsはステージステップを並行して実行できますが、GitHub Actionsが並行に処理できるのは現時点ではジョブ� けです。

Jenkinsの並列処理GitHub Actions
paralleljobs.<job_id>.strategy.max-parallel

Matrix

Both GitHub Actions and Jenkins let you use a matrix to define various system combinations.

JenkinsGitHub Actions
axisstrategy/matrix
context
stagessteps-context
excludes

ステップを使ったタスクの実行

Jenkinsはステップをまとめてステージにグループ化します。 それらの各ステップは、スクリプト、関数、コマンドなどです。 同様に、GitHub Actionsはジョブを使って特定のステップのグループを実行します。

JenkinsのステップGitHub Actions
scriptjobs.<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@v2 - uses: actions/setup-node@v2 with: node-version: 12 - run: npm install -g bats - run: bats tests working-directory: scripts/myapp