12

Jenkinsでのビルドパイプラインは、次の3つのジョブに分けられます。

  1. ビルドコード
  2. コードを環境にデプロイする
  3. 自動機能テストを実行する

#2または#3が現在別のビルドで実行されている場合、同時ビルドが発生し、ビルドパイプラインがビルドが#2に入るのを停止するように設定しました。

私ができるようにしたいのは、待機中のビルドが複数ある場合にJenkinsが処理するように設定し、#2と#3が終了して、最新のビルドのみが#2と#3に入るようにすることです。

箱から出してこれを行う方法はありますか?継続的デリバリーという本をお持ちの場合、私がやろうとしているのは、pにあるものを実装することです。118-p。119

4

3 に答える 3

14

[高度なプロジェクトオプション]で、これらのいずれかを試す必要があります。

  • アップストリームプロジェクトのビルド中にビルドをブロックし
    ます(ステップ2と3がキューに詰まらないようにする必要があります)

  • ダウンストリームプロジェクトがビルドされているときにビルドをブロックし
    ます(これはあなたの要求とは逆のように聞こえます
    が、実際の結果は、変更を単一のビルドサイクルに蓄積し、
    余分な実行を防ぎます)

これにより不要なビルドが山積みになる場合 は、キューを空にするか、実行中のジョブを強制終了するのに
役立つ次のリンクを確認してください。

乾杯

于 2012-10-11T11:53:29.453 に答える
0

ワークフロープラグインを使用すると、パイプライン全体を1つのスクリプトとして記述できます。この場合、このstageステップを使用してアクセスを制御できます。

stage 'build'
// any number of builds get here
stage name: 'deployAndTest', concurrency: 1
// only the last to build successfully enters here

(視覚化の目的で、JENKINS-29892deployを使用すると、ステージとステージの間の境界をマークできますtest。)

于 2015-09-16T01:59:16.407 に答える
0

「アップストリームをブロックする」または「ダウンストリームをブロックする」の問題は、作業を行っている可能性のあるものを常にブロックしていることです。

「git」を使用すると、これらの線に沿って何かを行うことができます-これはたまたま私がやっていることです...

次のように名前が付けられた、任意のステップの最新の完了したビルドジョブを指す追跡ブランチを使用します<branch>-latest-<step>。したがって、マスターに基づいて「ビルド」ステップを実行すると、が得られmaster-latest-buildます。このブランチをビルドスクリプトの最後に移動するのは非常に簡単です。次のコマンドを実行git branch -f <name> HEADしてからプッシュするだけです。

次に、その追跡ブランチからダウンストリームジョブをトリガーします。このように、すべてのジョブは緩く結合されており、アップストリームジョブが現在作業しているものに関係なく、アップストリームジョブが生成したものに対して正しいことを実行します。

それに加えて、ビルドにもタグを付けると、ダウンストリームジョブでタグを取得してビルド名として再利用できるため、さまざまな実行を簡単に関連付けることができます。

これは、パイプラインの長さが大幅に異なる場合に非常に効果的です。特に、ダウンストリームテストには一連のパフォーマンステストと統合テストが含まれるため、ダウンストリームステップがアップストリームステップよりもはるかに長い場合に効果的です。 。

于 2016-04-04T20:38:11.223 に答える