はじめに
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 |
---|---|
agent | jobs.<job_id>.runs-on jobs.<job_id>.container |
post | |
stages | jobs |
steps | jobs.<job_id>.steps |
ディレクティブの利用
Jenkinsは、宣言的パイプラインを管理するためにディレクティブを使います。 それらのディレクティブは、ワークフローの特徴と、その実行方法を定義します。 以下の表は、それらのディレクティブがGitHub Actionsの概念とどのように対応するかを示しています。
シーケンシャルなステージの利用
並列なジョブの処理
Jenkinsはステージ
とステップ
を並行して実行できますが、GitHub Actionsが並行に処理できるのは現時点ではジョブだけです。
Jenkinsの並列処理 | GitHub Actions |
---|---|
parallel | jobs.<job_id>.strategy.max-parallel |
Matrix
Both GitHub Actions and Jenkins let you use a matrix to define various system combinations.
Jenkins | GitHub Actions |
---|---|
axis | strategy/matrix context |
stages | steps-context |
excludes |
ステップを使ったタスクの実行
Jenkinsはステップ
をまとめてステージ
にグループ化します。 それらの各ステップは、スクリプト、関数、コマンドなどです。 同様に、GitHub Actionsはジョブ
を使って特定のステップ
のグループを実行します。
Jenkinsのステップ | GitHub Actions |
---|---|
script | jobs.<job_id>.steps |
一般的なタスクの例
cron
で実行するようパイプラインをスケジュール
Jenkinsのパイプライン | GitHub Actionsのワークフロー |
---|---|
|
|
パイプライン中での環境変数の設定
Jenkinsのパイプライン | GitHub Actionsのワークフロー |
---|---|
|
|
上流のプロジェクトからのビルド
Jenkinsのパイプライン | GitHub Actionsのワークフロー |
---|---|
|
|
複数のオペレーティングシステムでのビルド
Jenkinsのパイプライン | GitHub Actionsのワークフロー |
---|---|
|
|