Jenkinsを適切にスケーリングする方法は?


27

私のプロジェクトでは、Jenkins Master + 1 Jenkins slave(2エグゼキューター)を実行するAWSサーバーが1つあり
、ビルドパワーを増強するために3つのオプションがあります:

  1. スケールアップ:AWSインスタンスを大きくし、エグゼキューターを追加します。
  2. スケールアップ:AWSインスタンスを大きくし、別のjenkinsスレーブプロセスを追加します。
  3. スケールアウト:jenkinsスレーブを使用して別のAWSインスタンスを作成し、マスターに接続します

私たちは大規模な組織であり、現在のジェンキンスマスターは必要なすべての場所にすでにアクセスしているため、2。を実行したいと考えています。オプション3。「新しいサーバー」は、数週間かかる官僚的な承認をさらに必要とするため、複雑です。

だから私の質問は:

  • オプション2に技術的な問題はありますか?。各ジェンキンススレーブのエグゼキューターは、他のスレーブエグゼキューターを知らないのでしょうか?
  • 一般的に、ジェンキンスをスケーリングするための最良のアプローチは何ですか?スケールアップまたはスケールアウト?

落とし穴があります。別のハードウェアタイプに移動すると、新しいインスタンスでボリュームをバックアップおよび復元する必要があるため、インスタンスタイプを変更すると問題が発生する可能性があります。
テンシバイ

2
なぜ3番ではないのですか?Jenkinsにジョブを送信する通常の方法は、マスターすることです。また、特定の基準に基づいて、マスターは適切なスレーブにシームレスに送信します
ロミオニノフ

FWIW、また、ビルド構造を分析して、ビルドマシンのリソースをどのように使用するかを確認する必要があります-スケールアップは役に立たない可能性があります-同じマシンでの2つの並行ビルドのビルド時間が、同じ2つのビルドが重複せずに連続して実行されます。このような場合、実際に利用できる唯一の実用的なオプションは#3になります。
ダンコルニレスク

私は#3が優れていることに同意しますが、私は...#1、#2に対してそれの引数やarguementsを持っていない
オスカー・フォーリー

環境内で機会があれば、一時的な解決策を検討します。すでにAWSにいることを確認すると、ワークロードを処理しながら、必要に応じてマシンを簡単に上下させることができます。wiki.jenkins.io/display/JENKINS/Amazon+EC2+Plugin
ベガケーシー

回答:


11

同じマシンで複数のjenkinsスレーブを実行しても、根本的な技術な問題はありません。実際、同じマシン上で複数のスレーブを実行すると、それを行うためのいくつかの正当な理由がリストされます。

エグゼキュータを正しく使用すると、同じマシン上に複数のスレーブインスタンスがほとんど不要になりますが、考慮すべきユニークな使用例がいくつかあります。

  • 構成されたノード間でより多くの構成可能性が必要です。可能な限り使用する1つのノードセットと、必要な場合にのみ使用する他のノードがあるとします。
  • 異なるものを構築する複数のJenkinsマスターインストールが存在する場合があるため、この構成では、同じボックスに複数のマスターのスレーブを配置できます。そうです、ジェンキンスを使えば、本当に2人のマスターに仕えることができます。
  • Libvirt Slaves PluginなどのJenkinsプラグインと組み合わせて、仮想マシンの起動/停止/交換の容易さを活用できます。
  • ハードウェアへの投資と使用率を最大化し、同時に運用コスト(アイドリングスレーブを実行するためのユーティリティ費用など)を最小限に抑えたい場合。

一般的に、スケールアウトは、通常、利用可能な物理リソースのタイプ/サイズによって制限されるため、スケールアウトが推奨されます。

特に、ビルド能力を強化するために、実際のビルドを分析して、マシンリソースの使用方法、ボトルネックの場所/場所、およびスケールアップがさらに役立つかどうかを明らかにするために生じるスケーラビリティの制限を判断することをお勧めします。

たとえば、同じマシン上で2つの並列ビルドのビルド時間が、同じマシン上で順次実行される(重複しない)同じ2つのビルドの合計ビルド時間よりも長い場合がありました。そのような場合、全体的な建物の収容能力が実際に減少するため、スケールアップすら検討しません。



3

私はあなたがどちらもすべきではないと思う;)

まあちょっと。もっとエグゼキューターが必要だと思います。おそらくあなたのビルドは本当にリソースを消費しているのでしょうか?少なくとも4回実行しますが、ジョブに応じて6〜8回実行します。コアの数をエクセクターに合わせるのが好きです。そのため、ノードをスケールアップしたい場合があります。4-8エグゼキュータ用にM4ラージを実行すると思います。

また、スケールアウトする必要があると思いますが、スマートに行う必要があります。Jenkinsには、ビルドキューの内容に応じてAWSで自動的にスケールアウトするプラグインがあります。基本的に、スレーブを立ち上げて新しいスレーブにジョブを送信するまでのジョブの数と待機時間を伝えます。スレーブの最大量​​、最小量なども設定できます。


2

オプション3に進むために、スケールアップではなくスケールアウトします。すべてのJenkinsエージェントがECS(カスタムDockerベースのJenkins)で実行され、自動スケーリンググループが設定されています。すべてのJenkinsマスターがECSと通信しているため、ECSのワークロードを共有し、スケールアップ演習でJenkinsマスターを再作成する必要はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.