概要
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
}
}
}
}
}