LoginSignup
0
1

More than 1 year has passed since last update.

Jenkins pipeline でリストとして渡された複数の job を並列に流す

Posted at

概要

Jenkins で複数の似通った名前の job を並列に一気に流したいということが、Jenkins おじさんをやっているとあると思います。
並列に流すことで効率よく job を実行します。

どういうことか

しかし以下のようにナイーブに書いてしまうと、各 job が完了するまで次の job が実行されません。
各々が独立しているときには、これだと長い時間がかかって困ってしまいます。
また parallel だと、変数を for で回すことができません。

pipeline {
    parameters {
        string(name: "SERVICE_LIST", description: "service list. comma separated")
    }

    options {
        timestamps()
    }

    stages {
        stage("kick job") {
            steps {
                script {
                    service_list = params.SERVICE_LIST.replaceAll("\\s","").split(",")

                    for (int i = 0; i < service_list .size(); ++i) {
                        def service = service_list [i]
                        build(job: "./stop-${env}")    
                    }
                }
            }
        }
    }
}

そこで、次のようにすることで job を並列に実行することができます。(あとは slave の executer 依存...)

pipeline {
    parameters {
        string(name: "SERVICE_LIST", description: "service list. comma separated")
    }

    options {
        timestamps()
    }

    stages {
        stage("kick job") {
            steps {
                script {
                    service_list = params.SERVICE_LIST.replaceAll("\\s","").split(",")
                    def branches = [:]

                    for (int i = 0; i < service_list.size(); ++i) {
                        def service = service_list[i]
                        branches["stop_${env}"] = {
                            build(job: "./stop-${env}")
                        }
                    }
                    parallel branches
                }
            }
        }
    }
}
0
1
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
0
1