次のような宣言型パイプラインを取得しようとしています。
pipeline {
environment {
ENV1 = 'default'
ENV2 = 'default also'
}
}
ENV1
問題は、任意の条件に基づいてまたはの値を上書きできるようにしたいということですENV2
。現在のニーズは、ブランチをベースにすることだけですが、より複雑な条件を想像することもできます。
これを実装する合理的な方法はありますか? オンラインで次のような例をいくつか見ました:
stages {
stage('Set environment') {
steps {
script {
ENV1 = 'new1'
}
}
}
}
しかし、これは実際の環境変数を設定するものではなく、後の呼び出しをオーバーライドするローカル変数を設定するものであると私は考えています。ENV1
問題は、これらの環境変数を nodejs スクリプトで読み取る必要があり、それらは実際のマシンの環境変数である必要があることです。
jenkinsfile で環境変数を動的に設定する方法はありますか?
ベストアンサー1
Groovy'sを試してみてはいかがでしょうか三項演算子:
pipeline {
agent any
environment {
ENV_NAME = "${env.BRANCH_NAME == "develop" ? "staging" : "production"}"
}
}
または関数への条件を抽出します。
pipeline {
agent any
environment {
ENV_NAME = getEnvName(env.BRANCH_NAME)
}
}
// ...
def getEnvName(branchName) {
if("int".equals(branchName)) {
return "int";
} else if ("production".equals(branchName)) {
return "prod";
} else {
return "dev";
}
}
しかし、実際には、Groovy構文を使用して何でも行うことができます(少なくともJenkinsでサポートされている機能)
したがって、最も柔軟なオプションは、正規表現とブランチ名を使用することです...したがって、VCS レベルでそのように実行する場合は、Git Flow を完全にサポートできます。