2017-05-15 4 views
4

私は2週間インターネット全体を検索しましたが、freenode IRCとJenkinsユーザーグループのメーリングリストで尋ねましたが、ここでは答えがないので、私は最後の希望ですJenkinsパイプラインと膨大な並列ステップ

私は何百もの並列ブランチを生成するJenkinsスクリプトパイプラインを持っており、何百ものスレーブノードで同時に実行する必要があります。現時点では、Jenkins BlueOceanのユーザーインターフェイスはそれに適していないようです。私たちはすべてのステップを表示することができないという点に達しています。

私たちの必要性を理解するために、何らかのバックグラウンドを提供する必要があります。私たちには数千のBehat/Seleniumを持つ巨大なプロジェクトがあります。 Jenkinsからソースコードをダウンロードし、アーティファクトをJenkinsにアップロードすることで、テストを実行するすべてのテストとコンシューマを格納するキューイングシステム(RabbitMq)を使用していましたが、これまでのところ基本的なソリューションを実装しましたが、 Jenkinsネイティブの奴隷であり、それは十分に保守できません(例えば、リアルタイムの出力ログと使用統計の恩恵を受けません)。

ここに問題を記述する未解決の問題があることを知っています。https://issues.jenkins-ci.org/browse/JENKINS-41205しかし、基本的には、次の週には回避策が必要です(私たちのチームはこの新しいパイプラインを長い間待っています)。

当社pippelineは、現時点ではそのようになっています

Build --- Unit Tests --- Integration Tests --- Functional Tests --- 
       |    |     | 
       tool A   suite A  matrix-A-A-batch 0 
       tool B   suite B  matrix-A-A-batch 1 
       tool C       matrix-A-A-batch 2 
               matrix-A-A-batch 3 
                .... 
               "Unable to display more" 

あなたがここに私たちのJenkinsfileのフルバージョンを見つけることができます:https://github.com/willy-ahva/pim-community-dev/blob/086e4ed48ef1a3d880ca16b6f5572f350d26eb03/Jenkinsfile(それは複雑に見えますがありますが、基本的には、本当の問題は、「機能テスト」であります段階)

私の質問は以下のとおりです。

  1. 私は良い方法を並行使用していますか?
  2. Jenkins/BlueOceanの問題のみですか、リンクした問題に貢献する必要がありますか?もしそうなら、私はJava開発者ではありません。
  3. MultiJobを使用し、ステップの代わりにジョブを並列化すべきですか?
  4. 私は使用できる並列性以外のツールはありますか? (何らかのフォークなど)?

ありがとうございました。私はJenkinsがPipelineとBlueOceanのUIになったことを愛しています。私は本当に私たちのチームでそれを働かせたいと思っています。

+0

Spencer Maloneが解決したので、私たちはこの種の並行処理のためにキューシステムを保ちました。私たちはビルドを少し変更しましたので、スケーラビリティがより簡単になりました(マスターとコンシューマ間の多対1の関係をすべて削除して、ボトルネックを発生させないようにしました)。 –

答えて

1
  1. これは、おそらく並行タスクを実行するための貧弱な方法です。代わりに、各並列マップエントリをワーカーとして扱い、テストをキュー/スタック/データ構造に入れます。各ワーカースレッドは、必要に応じてキューからポップアウトすることができます。どのテストが失敗したのかが明らかになるように、ロギングにはもっと注意を払わなければなりませんが、それはあまり難しくありません。
  2. これは、他のUIデザインの問題と同じくらい簡単に修正できるものではないでしょう。私はあなたがそれに突っ込みを与えることをお勧めします!誰が知っていますか、解決策があなたをクリックしますか?
  3. おそらくそうではありません。私の意見では、これは、このmuddierを作る
  4. 並列は、あなたのオプションです。

これをやり続けたいのですが、UIが奇妙なものにならないようにするには、各テストをステージとして定義するのを止めることができます。失敗したときに何が失敗するのかははっきりしませんが、UIはより幸せになるはずです。

+0

"代わりに、各並列マップエントリをワーカーとして扱い、テストをキュー/スタック/データ構造体に入れます。より具体的になりますか?私はすでにそれをしましたが、Jenkinsfileの残りの部分と同様に開発チームがパイプラインを変更できるようにしたいと思っています。 –

関連する問題