はじめに
- Jenkins pipelineを使う際に、あるジョブの中で別のジョブを実行したい場合があると思います。今回はJenkinsのパイプラインジョブを使って、複数のジョブを呼び出して実行してみたいと思います。
- 動作環境
- Jenkins 2.361.1
ジョブと実行の流れ
ジョブ
今回は以下の3つのジョブを作成します。
- execute-jobs
- first-job
- second-job
実行の流れ
逐次処理と並列処理の2つのパターンでやってみたいと思います。
逐次処理
- 「execute-jobs」を起動する
- 「execute-jobs」の処理の中で「first-job」を呼び出す
- 「first-job」が終了したら、「execute-jobs」の処理の中で「second-job」を呼び出す
- 「second-job」が終了したら、「execute-jobs」が終了する
並列処理
- 「execute-jobs」を起動する
- 「execute-jobs」の処理の中で「first-job」と「second-job」を同時に呼び出す
- 「first-job」と「second-job」が全て終了したら、「execute-jobs」が終了する
ジョブの作成と実行
first-jobとsecond-jobの作成
まず「first-job」と「second-job」を作成していきます。「新規ジョブ作成」をクリックし、ジョブ作成画面を開きます。「ジョブ名入力」に「first-job」を入力し、「パイプライン」を選択します。
ジョブ設定画面の「Script」に以下のスクリプトを貼り付けます。「This is the first job.」をコンソールに出力して、30秒待機するという処理です。
pipeline {
agent any
stages {
stage("echo") {
steps {
sh "echo This is the first job."
sh "sleep 30"
}
}
}
}
同じ手順で「second-job」を作成します。以下のスクリプトを使います。
pipeline {
agent any
stages {
stage("echo") {
steps {
sh "echo This is the second job."
sh "sleep 30"
}
}
}
}
execute-jobsの作成と実行
では、「first-job」と「second-job」の呼び出し元となる「execute-jobs」を作成して実行してみます。
逐次処理
まず逐次処理をやってみます。「execute-jobs」の作成手順は上記「first-job」と「second-job」の作成手順と同じです。以下のスクリプトを使います。build job
を指定することで該当ジョブを呼び出すことが可能です。
pipeline {
agent any
stages {
stage("first-job") {
steps {
build job: "first-job"
}
}
stage("second-job") {
steps {
build job: "second-job"
}
}
}
}
「execute-jobs」を実行してみると、以下のようにfirst-jobとsecond-jobが順番通りに呼び出されたのがわかります。
以下、「first-job」と「second-job」の実行結果です。
パラメータの使用と条件分岐
「first-job」と「second-job」にビルドパラメータを追加し、「execute-jobs」のスクリプトでそれぞれのジョブを呼び出す際にパラメータを渡せるようにします。さらに条件分岐を使って選択したジョブのみ呼び出すよう「execute-jobs」を修正します。
まず「first-job」の設定画面を開き、以下のパラメータを追加します。デフォルト値は設定しません。
スクリプトを以下のように修正します。
pipeline {
agent any
stages {
stage("echo") {
steps {
sh "echo Hi, ${params.name}, this is the first job."
sh "sleep 30"
}
}
}
}
「second-job」も同じようにパラメータを追加します。
- 文字列
- 名前:name
スクリプトを以下のように修正します。
pipeline {
agent any
stages {
stage("echo") {
steps {
sh "echo Hi, ${params.name}, this is the second job."
sh "sleep 30"
}
}
}
}
次に「execute-jobs」の設定画面を開き、以下の2つのパラメータを追加します。デフォルト値は設定しません。
- 真偽値
- 名前:firstJob
- 真偽値
- 名前:secondJob
スクリプトを以下のように修正します。build jobの後ろにparameters
を追加することで、ジョブを呼び出す際に該当ジョブに必要なパラメータを渡すことができます。また、whenを使って条件分岐をさせることで、「execute-jobs」をパラメータ付きビルドで実行する際に、チェックボックスにチェックがついたジョブのみ
呼び出します。
pipeline {
agent any
stages {
stage("first-job") {
when {
expression { params.firstJob }
}
steps {
build job: "first-job",
parameters: [
string(name: "name", value: "T")
]
}
}
stage("second-job") {
when {
expression { params.secondJob }
}
steps {
build job: "second-job",
parameters: [
string(name: "name", value: "Fmak")
]
}
}
}
}
まず「firstJob」と「secondJob」を全て選択した状態で「execute-jobs」を実行してみます。
ジョブが順番通りに呼び出されて、Nameパラメータの値も渡されています。
次に「firstJob」を外して、「secondJob」のみ選択して「execute-jobs」を実行してみます。
並列処理
最後に並列処理をやってみます。parallel
を使うことで並列処理を実現可能です。「execute-jobs」のスクリプトを以下に変更します。
pipeline {
agent any
stages {
stage("parallel") {
parallel {
stage("first-job") {
when {
expression { params.firstJob }
}
steps {
build job: "first-job",
parameters: [
string(name: "name", value: "Fmak")
]
}
}
stage("second-job") {
when {
expression { params.secondJob }
}
steps {
build job: "second-job",
parameters: [
string(name: "name", value: "Fmak")
]
}
}
}
}
}
}
Jenkinsのデフォルトの同時実行数が2になっているため、ジョブ実行前に同時実行数を増やしておきます。
「Jenkinsの管理」→「ノードの管理」を開き、ジョブ実行用ノードの設定画面を開きます。
同時実行数を「3」に変更します。
では、「firstJob」と「secondJob」を全て選択して「execute-jobs」を実行してみます。
「first-job」と「second-job」が同時に呼び出されています。