9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Jenkins]Pipelineから複数のジョブを呼び出す

Last updated at Posted at 2022-11-22

はじめに

  • Jenkins pipelineを使う際に、あるジョブの中で別のジョブを実行したい場合があると思います。今回はJenkinsのパイプラインジョブを使って、複数のジョブを呼び出して実行してみたいと思います。
  • 動作環境
    • Jenkins 2.361.1

ジョブと実行の流れ

ジョブ

今回は以下の3つのジョブを作成します。

  • execute-jobs
  • first-job
  • second-job

実行の流れ

逐次処理と並列処理の2つのパターンでやってみたいと思います。

逐次処理

Screenshot 2022-11-17 at 21.41.45.png

  1. 「execute-jobs」を起動する
  2. 「execute-jobs」の処理の中で「first-job」を呼び出す
  3. 「first-job」が終了したら、「execute-jobs」の処理の中で「second-job」を呼び出す
  4. 「second-job」が終了したら、「execute-jobs」が終了する

並列処理

Screenshot 2022-11-17 at 21.41.17.png

  1. 「execute-jobs」を起動する
  2. 「execute-jobs」の処理の中で「first-job」と「second-job」を同時に呼び出す
  3. 「first-job」と「second-job」が全て終了したら、「execute-jobs」が終了する

ジョブの作成と実行

first-jobとsecond-jobの作成

まず「first-job」と「second-job」を作成していきます。「新規ジョブ作成」をクリックし、ジョブ作成画面を開きます。「ジョブ名入力」に「first-job」を入力し、「パイプライン」を選択します。
Screenshot 2022-11-17 at 21.44.21.png

ジョブ設定画面の「Script」に以下のスクリプトを貼り付けます。「This is the first job.」をコンソールに出力して、30秒待機するという処理です。

pipeline {
    agent any
    stages {
        stage("echo") {
            steps {
                sh "echo This is the first job."
                sh "sleep 30"
            }
        }
    }
}

Screenshot 2022-11-18 at 10.43.33.png

同じ手順で「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が順番通りに呼び出されたのがわかります。
Screenshot 2022-11-18 at 10.44.39.png
Screenshot 2022-11-18 at 10.44.53.png
Screenshot 2022-11-18 at 10.45.22.png
Screenshot 2022-11-18 at 10.45.30.png
Screenshot 2022-11-18 at 10.46.01.png

以下、「first-job」と「second-job」の実行結果です。
Screenshot 2022-11-18 at 10.46.14.png
Screenshot 2022-11-18 at 10.46.22.png

パラメータの使用と条件分岐

「first-job」と「second-job」にビルドパラメータを追加し、「execute-jobs」のスクリプトでそれぞれのジョブを呼び出す際にパラメータを渡せるようにします。さらに条件分岐を使って選択したジョブのみ呼び出すよう「execute-jobs」を修正します。
まず「first-job」の設定画面を開き、以下のパラメータを追加します。デフォルト値は設定しません。

  • 文字列
    • 名前:name
      Screenshot 2022-11-18 at 11.53.19.png

スクリプトを以下のように修正します。

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」を実行してみます。
Screenshot 2022-11-18 at 11.55.46.png

ジョブが順番通りに呼び出されて、Nameパラメータの値も渡されています。
Screenshot 2022-11-18 at 11.57.25.png
Screenshot 2022-11-18 at 11.57.35.png
Screenshot 2022-11-18 at 11.57.42.png

次に「firstJob」を外して、「secondJob」のみ選択して「execute-jobs」を実行してみます。
Screenshot 2022-11-18 at 11.59.49.png

「first-job」がスキップされましたね。
Screenshot 2022-11-18 at 12.00.42.png

並列処理

最後に並列処理をやってみます。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の管理」→「ノードの管理」を開き、ジョブ実行用ノードの設定画面を開きます。
Screenshot 2022-11-18 at 11.24.09.png
Screenshot 2022-11-18 at 11.23.04.png
同時実行数を「3」に変更します。
Screenshot 2022-11-18 at 11.23.14.png

では、「firstJob」と「secondJob」を全て選択して「execute-jobs」を実行してみます。
Screenshot 2022-11-18 at 12.02.06.png

「first-job」と「second-job」が同時に呼び出されています。
Screenshot 2022-11-18 at 12.03.33.png
Screenshot 2022-11-18 at 12.03.43.png
Screenshot 2022-11-18 at 12.04.11.png

参考

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?