12

このジョブの前回の実行で保存された特定の値を取得する必要がある時間トリガージョブがあります。

Jenkins環境でジョブの実行間で値を保存する方法はありますか?

たとえば、シェルスクリプトアクションで次のようなものを書くことができます。

XXX=`cat /hardcoded/path/xxx`
#job itself
echo NEW_XXX > /hardcoded/path/xxx

しかし、より信頼できるアプローチはありますか?

4

3 に答える 3

20

いくつかのオプション:

  • データをワークスペースに保存します。 データが重要でない場合(つまり、ワークスペースが削除されたときにデータを削除してもかまいません)、それで問題ありません。これは、事前に構築されたライブラリの依存関係など、計算にコストのかかるデータをキャッシュするためにのみ使用します。
  • データをファイルシステムの固定された場所に保存します。 jenkinsの自己完結性を低下させ、移行とバックアップをより複雑にしますが、おそらくそれほど複雑ではありません。特に、jenkinsのカスタムuser-subdirectoryにデータを保存する場合。並列ビルドもトリッキーであり、分散ビルドはおそらく不可能です。Jenkinsには、userContentこれに使用できるサブディレクトリがあります。これにより、ファイルは少なくともjenkinsインストールの一部になり、より簡単に移行またはバックアップできます。これは、ビルドの(かなり大きな)コードカバレッジトレンドファイルに対して行います。
  • 別のマシン(データベースなど)にデータを保存します。 これはセットアップがより複雑ですが、ローカルマシンの詳細にあまり依存せず、分散ビルドと並列ビルドを機能させる方がおそらく簡単です。ライブの変更ログを維持するためにこれを行いました。
  • データをビルドアーティファクトとして保存します。 これは、以前のビルドのアーティファクトを確認することを意味します。安全で再現性があり、Uriはそのようなアーティファクトにアクセスするために使用されるため、分散ビルドでも問題ありません。ただし、失敗したビルドに対処する必要があり(いくつかのバージョンを振り返る必要がありますか?最初からやり直しますか?)、多くのコピーを保存します。これは、1KBの場合は問題ありませんが、1GBの場合は問題ありません。ここでのもう1つの欠点は、アーティファクトへの匿名アクセスを許可するために、おそらくjenkinのセキュリティ設定をかなり開く必要があることです(URIからダウンロードしているだけなので)。

適切な解決策は、状況によって異なります。

于 2012-12-13T15:22:15.033 に答える
3

パラメータ化されたビルドのパラメータとして、最初のジョブから2番目のジョブに変数を渡します。別のビルドからパラメーター化されたビルドをトリガーする方法の詳細については、この質問を参照してください。

于 2012-03-24T01:07:57.510 に答える
3

パイプラインを使用していて、変数が単純なタイプである場合は、パラメーターを使用して、同じジョブの実行間でパイプラインを格納できます。

この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)
            ])
          ])
        }
      }
    }
  }
于 2021-01-21T15:21:24.653 に答える