5

マルチプラットフォーム製品のビルド システムを 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 に「=」を使用します。他にも依存プロジェクトがあるので、オフィスに戻ってサンドボックスをセットアップするときにこれを試してみます (半日作業)。

誰もが推奨事項やコメントを持っていますか?

4

5 に答える 5

8

この投稿と以下のコメントに感謝し ます。

これが私のために働いた答えです:

  1. Parameterized Trigger Plugin を取得します (インストール方法: Manage Jenkins->Manage Plugins->Available を選択し、「Parameterized Trigger Plugin」をチェックしてインストールします。「Environment Injector Plugin」もインストールしたことに注意してください。これも必要になる場合があります)
  2. JOB_1 に移動し、ビルド後のアクションを追加します (他のプロジェクトでパラメーター化されたビルドをトリガーします)。
  3. JOB_2 をビルドするプロジェクトを入力します
  4. パラメータの追加 (定義済みパラメータ)
  5. [パラメーター] ボックスに次のように入力します。SVN_REV=${SVN_REVISION}
  6. 適用して保存
  7. 最も重要: このパラメータ (SVN_REV) を JOB_2 に追加する必要があります
  8. 「このビルドはパラメーター化されています」に移動してチェックし、「文字列パラメーター」を追加します
  9. 「SVN_REV」と入力し(同じ名前である必要があります)、デフォルト値の1またはその他を入力します
  10. これは環境変数になりました。アクセスするには、%SVN_REV% だけが必要です
  11. ビルド ステップで、echo %SVN_REV% と記述すると、SVN_REVISION が表示されます。

要するに (パラメーターは両方のジョブで指定する必要があります) JOB_1 => SVN_REV=${SVN_REVISION}

JOB_2 => SVN_REV を文字列パラメータとして追加し、タイプ %SVN_REV% にアクセスします

于 2016-10-31T19:07:54.717 に答える
1

スレーブ マシンでジョブを呼び出し、マスターが使用している SVN リビジョンを渡すという同様の問題に遭遇しました。この問題の解決方法は次のとおりです。

1)MASTER_SVN_REVISIONなどの事前定義されたパラメーターを使用して子ジョブを呼び出し、SVN_REVISIONの値を割り当てます ここに画像の説明を入力

2) ステップ 1 で呼び出したジョブで、次のメカニズムを使用して MASTER_SVN_REVISION の値を使用します。

ここに画像の説明を入力

于 2015-04-27T17:04:53.547 に答える