このジョブの前回の実行で保存された特定の値を取得する必要がある時間トリガージョブがあります。
Jenkins環境でジョブの実行間で値を保存する方法はありますか?
たとえば、シェルスクリプトアクションで次のようなものを書くことができます。
XXX=`cat /hardcoded/path/xxx`
#job itself
echo NEW_XXX > /hardcoded/path/xxx
しかし、より信頼できるアプローチはありますか?
このジョブの前回の実行で保存された特定の値を取得する必要がある時間トリガージョブがあります。
Jenkins環境でジョブの実行間で値を保存する方法はありますか?
たとえば、シェルスクリプトアクションで次のようなものを書くことができます。
XXX=`cat /hardcoded/path/xxx`
#job itself
echo NEW_XXX > /hardcoded/path/xxx
しかし、より信頼できるアプローチはありますか?
いくつかのオプション:
userContent
これに使用できるサブディレクトリがあります。これにより、ファイルは少なくともjenkinsインストールの一部になり、より簡単に移行またはバックアップできます。これは、ビルドの(かなり大きな)コードカバレッジトレンドファイルに対して行います。適切な解決策は、状況によって異なります。
パラメータ化されたビルドのパラメータとして、最初のジョブから2番目のジョブに変数を渡します。別のビルドからパラメーター化されたビルドをトリガーする方法の詳細については、この質問を参照してください。
パイプラインを使用していて、変数が単純なタイプである場合は、パラメーターを使用して、同じジョブの実行間でパイプラインを格納できます。
このproperties
ステップを使用して、パイプライン内からパラメーターとそのデフォルト値を構成できます。構成が完了すると、各実行の開始時にそれらを読み取り、最後に(デフォルト値として)保存できます。宣言型パイプラインでは、次のようになります。
pipeline {
agent none
options {
skipDefaultCheckout true
}
stages {
stage('Read Variable'){
steps {
script {
try {
variable = params.YOUR_VARIABLE
}
catch (Exception e) {
echo("Could not read variable from parameters, assuming this is the first run of the pipeline. Exception: ${e}")
variable = ""
}
}
}
}
stage('Save Variable for next run'){
steps {
script {
properties([
parameters([
string(defaultValue: "${variable}", description: 'Variable description', name: 'YOUR_VARIABLE', trim: true)
])
])
}
}
}
}