注: GitHub ホステッド ランナーは、現在 GitHub Enterprise Server でサポートされていません。 GitHub public roadmap で、今後の計画的なサポートの詳細を確認できます。
はじめに
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 ホストまたはセルフホストランナーに送信でき、ラベルを使用してさまざまな属性に従ってランナーを分類できます。 詳しくは、「GitHub Actions を理解する」と「セルフホスト ランナーについて」をご覧く� さい。
セクションを利用したパイプラインの整理
Jenkinsは、宣言的パイプラインを複数のセクションに分割します。 同様に、GitHub Actions はワークフローを個別のセクションに編成します。 以下の表は、JenkinsのセクションをGitHub Actionsのワークフローと比較しています。
Jenkinsのディレクティブ | GitHub Actions |
---|---|
agent | jobs.<job_id>.runs-on jobs.<job_id>.container |
post | |
stages | jobs |
steps | jobs.<job_id>.steps |
ディレクティブの使用
Jenkins では、宣言的パイプライン を管理するためにディレクティブを使います。 それらのディレクティブは、ワークフローの特徴と、その実行方法を定義します。 以下の表は、それらのディレクティブがGitHub Actionsの概念とどのように対応するかを示しています。
シーケンシャルなステージの利用
並列なジョブの処理
Jenkins は stages
と steps
を並列に実行できますが、GitHub Actions が並列に実行できるのは現時点ではジョブ� けです。
Jenkinsの並列処理 | GitHub Actions |
---|---|
parallel | jobs.<job_id>.strategy.max-parallel |
Matrix
GitHub Actions と Jenkins はどちらも、マトリックスを使ってさまざまなシステ� の組み合わせを定義できます。
Jenkins | GitHub Actions |
---|---|
axis | strategy/matrix context |
stages | steps-context |
excludes |
ステップを使ったタスクの実行
Jenkins は stages
で steps
をグループ化します。 それらの各ステップは、スクリプト、関数、コマンドなどです。 同様に、GitHub Actions は jobs
を使って steps
の特定のグループを実行します。
Jenkinsのステップ | GitHub Actions |
---|---|
script | jobs.<job_id>.steps |
一般的なタスクの例
cron
で実行するパイプラインのスケジュール設定
Jenkinsのパイプライン | GitHub Actionsのワークフロー |
---|---|
|
|
パイプライン中での環境変数の設定
Jenkinsのパイプライン | GitHub Actionsのワークフロー |
---|---|
|
|
上流のプロジェクトからのビルド
Jenkinsのパイプライン | GitHub Actionsのワークフロー |
---|---|
|
|
複数のオペレーティングシステ� でのビルド
Jenkinsのパイプライン | GitHub Actionsのワークフロー |
---|---|
|
|