マルチプラットフォーム製品のビルド システムを CruiseControl から jenkins に移動しました。これは単一のモノリシック ジョブでした:
1. 変更を確認する
2. プロパティ ファイルの製品ビルド番号を更新する
3. ファイルをサブバージョンにコミットする
4. ローカル チェックアウトのために他のプラットフォームに svn リビジョン番号を渡す (パフォーマンス上の理由)
5. ビルド (C++、Java )
6.テスト
Jenkins では、ビルドとテストを 2 つのジョブに分割し、ビルドがテストをトリガーします。テストを実行するには、すべてのプラットフォーム ビルドが成功する必要があります。プラットフォーム B でのビルドの失敗に関係なく、プラットフォーム A でテストを実行したいのですが、それは別の問題です。
私が今対処しようとしている問題は、ビルド フェーズに関するものです。Jenkins が起動すると、ジョブの開始時にリポジトリの SVN_REVISION が認識されます。ジョブ中のコンパイル前にビルド番号をインクリメントします。ダウンストリーム ジョブに渡す必要があるのは、この svn リビジョンです。すべてのプラットフォームで同じリビジョンがチェックアウトされ、テスト ジョブでも同じリビジョンがチェックアウトされるようにする必要があります。コンパイルには 2 ~ 3 時間、テストには約 7 時間かかるため、テスト ジョブに含まれるビルド中に新しいコミットが発生することは正常です。また、ビルド フェーズ中に、チェックアウトの速度が異なるため、1 つのプラットフォームに含まれるが他のプラットフォームには含まれないコミットがありました。
SVN_REVISION (ジョブ開始時のリビジョン) を渡すことができる Parameterized Trigger プラグインを試しましたが、変更されたファイルのリビジョンとビルド番号は渡しません。他のケースではパラメーター化されたトリガーを使用し、必要なことを行います。
プロパティファイルにsvnリビジョン番号を追加することを考えていることの1つ。ファイルが変更されていないと仮定すると、他のジョブでプロパティ ファイルからリビジョンを読み取ることができますが、これは危険な場合があります。svn は「:」を使用してプロパティ、IIRC を区切ります。他のプロパティは、シェル スクリプトで使用されるプロパティも読み取るため、key=value に「=」を使用します。他にも依存プロジェクトがあるので、オフィスに戻ってサンドボックスをセットアップするときにこれを試してみます (半日作業)。
誰もが推奨事項やコメントを持っていますか?