1

複雑なビルド パイプラインをセットアップしようとしています。依存関係グラフは次のようになります。

      Prj-A
        |
      Prj-B
  /     |    \ 
Prj-C Prj-D Prj-E
 |      |     |
 |      |     |
 |      |     |
 --------------
        |
      Prj-F

パイプラインは Prj-A から始まり、Prj-B が続きます。Prj-C DE は並行して実行できます。Prj-C、D、E がすべて完了したら、Prj-F を実行します。

要件の 1 つは、たとえば、Prj-C は Prj-A と Prj-B に依存しているため、Prj-C のソース コードのみを変更する場合は、Prj-C のみを実行し、次に Prj-G を実行したいということです。これは、ビルド時間を節約するために他のジョブをビルドしないようにするためです。

多くのグーグル検索の後、そのような場合に利用できる解決策が見つかりませんでした。したがって、私の解決策は次のとおりです(私は試していません)。

  1. プロジェクトごとにトリガー ジョブを作成します。これは、そのプロジェクトのソース コードが変更されたかどうかのみをチェックするため、7 つのトリガー ジョブが作成されます。
  2. パイプラインの依存関係リゾルバー ジョブを作成します。
  3. トリガー ジョブのいずれかが変更を検出すると、依存関係リゾルバー ジョブがトリガーされます。依存関係リゾルバー ジョブは、どのプロジェクトが変更されたかを認識し、このビルドでスキップできるプロジェクトを判断し、対応する環境変数を設定します。たとえば、Prj-C を変更する場合、skip-proja=true、skip-projb=true、skip-projd=true、skip proj-e=true を設定します。その後、ビルド パイプラインをトリガーします。
  4. 各プロジェクトが実行されると、依存関係リゾルバー ジョブによって設定された環境変数に従ってスキップできるかどうかがチェックされます。

この場合の他の解決策があるかどうか、または私の解決策に対するコメントがあるかどうかをお知らせください。ありがとう!

4

1 に答える 1

1

あなたのソリューションは実行可能に見えますが、理想的には、B の同じバージョン (ビルド カウンター) から渡された C、D、および E の組み合わせのみで proj-f をトリガーする必要があります。

このような複雑なセットアップでは、これらのシナリオを念頭に置いて構築されたGo (私はそこで働いています)のようなツールを使用することをお勧めします。ファンインを理解するツールがなければ、偽のビルドを引き起こす可能性のあるファンイン シナリオがあります。

http://support.thoughtworks.com/entries/22229668-Go-s-Dependency-Management

http://www.thoughtworks-studios.com/go-continuous-delivery/compare

于 2013-07-28T10:19:36.967 に答える