Kubernetes で Jenkins を使用する方法をご存知ですか?

Kubernetes で Jenkins を使用する方法をご存知ですか?

[[403811]]

この記事はWeChatの公開アカウント「Ask Qi」から転載したもので、著者はChen Shaowenです。記事を転載する場合は公式アカウントまでご連絡ください。

1. より大きな-Xms -Xmxパラメータを設定する

Jenkins は Java で書かれたオーケストレーション エンジンであり、Full GC 中に Stop The World (STW) を実行します。大規模ビルドでは、STW により Jenkins が新しいリクエストを処理できなくなる可能性があります。

頻繁な STW を回避し、同時実行性を高めるには、より大きなヒープ (-Xms3g -Xmx6g -XX:MaxRAM=6g) を設定することをお勧めします。監視値に応じて具体的な値を設定できます。 Java Full GC 後、メモリ使用量は大幅に減少します。

2. リクエスト値を小さくしすぎない

リクエストが小さすぎると、Jenkins の実行後にノード リソースが不足し、ノードの削除やクラッシュが発生する可能性があります。

リクエストは実際の値に近いはずです。十分なマシン リソースがある場合は、Jenkins が可能な限り別のマシンで実行できるようにアフィニティを構成する必要があります。要求 >= 1.25 * JVM 最大ヒープ メモリ、制限 >= 2 * JVM 最大ヒープ メモリ。

3. IOパフォーマンスは悪くない

Jenkins はディスク ファイルを使用してデータを保存します。各パイプラインと各ビルドはファイル ディレクトリを占有し、多数のファイルを生成します。通常、パイプラインの数は限られていますが、ビルド履歴が 10,000 を超えるレベルに達すると、Jenkins に対する IO の影響が感じられるようになるでしょう。

ローカルストレージを使用する場合は、高性能 SSD をお勧めします。ネットワーク ストレージを使用する場合は、高性能なネットワーク サポートが必要であり、クライアントのキャッシュ プールを増やす必要があります。

4. jenkins_home のディスク容量を増やす

ディスクがいっぱいになると、Jenkins は動作しなくなり、Jenkins のバックグラウンドにエラー メッセージが表示されます。

Jenkins の作業ディレクトリのディスク使用量を監視し、アラーム ルールを構成することをお勧めします。監視アラームシステムがない場合は、/var/jenkins_home ディレクトリに、より大きなディスク領域を直接設定することをお勧めします。一部のストレージ クラスは動的拡張をサポートしていないため、ディスクがいっぱいになった場合は手動でのみコピーできます。

5. Kubernetesプラグインを使用してKubernetes上に構築する

物理マシンと仮想マシンに基づく構築では、運用および保守コストが増加し、同時実行数が制限されます。

Kubernetes プラグインを使用して Kubernetes 上に構築することで、拡張性や保守性が容易なクラウドネイティブの利点を最大限に活用し、大規模な構築を行うことができます。参考: Kubernetes 上で Jenkins スレーブを動的に作成する、https://www.chenshaowen.com/blog/creating-jenkins-slave-dynamically-on-kubernetes.html)。ビルドには多くのリソースが消費されるため、クラスターへの影響を回避するために、ビルド Pod を指定されたノードに集中させて実行するようにアフィニティを設定できます。

6. CasCを使用してJenkinsの設定を管理する

Jenkins ページを通じてさまざまなビルド、セキュリティ、その他の構成を実行するのは面倒で保守が難しいだけでなく、再利用もできません。

CasC プラグインを使用すると、ユーザーは Jenkins の構成をテキスト形式で記述し、それを Git リポジトリに配置してバージョン管理を行うことができます。

  1. ジェンキンス:
  2. セキュリティレルム:
  3. ldap:
  4. 構成:
  5. -グループメンバーシップ戦略:
  6. ユーザーレコードから:
  7. 属性名: "memberOf"  
  8. ルートDNの推測を禁止: false  
  9. ルートDN: "dc=acme,dc=org"  
  10. サーバー: "ldaps://ldap.acme.org:1636"  
  11.  
  12. ノード:
  13. - 永続:
  14. 名前: "静的エージェント"  
  15. リモートFS: "/home/jenkins"  
  16. ランチャー:
  17. 翻訳:
  18. 作業ディレクトリ設定:
  19. 無効: true  
  20. failIfWorkDirIsMissing: false  
  21. 内部ディレクトリ: "リモート"  
  22. 作業ディレクトリパス: "/tmp"  
  23.  
  24. スレーブエージェントポート: 50000
  25. エージェントプロトコル:
  26. - 「jnlp2」  

7. カスタム WAR パッケージャーを使用して Jenkins をパッケージ化する

新しい Jenkins 環境をデプロイする場合、多数のプラグインをインストールする必要があり、デプロイ速度に大きく影響します。同時に、プラグインが正常にダウンロードできるかどうかについても不確実性があります。

カスタム WAR パッケージャーを使用すると、ユーザーは Jenkins、構成、プラグインを完全な WAR パッケージまたはイメージにパッケージ化できます。このように、開発やテストでも、オンライン展開でも、非常に便利に展開でき、環境は一貫しており、ユーザーは yaml ファイルを記述するだけで済みます。

  1. バンドル:
  2. グループID: com.dev
  3. アーティファクト ID: "jenkins"  
  4. 説明: 「Jenkins Custom With Package」  
  5. ベンダー: 「Jenkins Project」  
  6. ビルド設定:
  7. ドッカー:
  8. ベース: jenkins/jenkins:2.277.4
  9. タグ: シャオウェンチェン/ジェンキンス:2.277.4
  10. ビルド: true  
  11. 戦争:
  12. グループ ID: org.jenkins-ci.main
  13. アーティファクト ID: jenkins-war
  14. ソース:
  15. バージョン: 2.277.4
  16. プラグイン:
  17. - グループID: io.jenkins
  18. アーティファクト ID:構成コード
  19. ソース:
  20. バージョン: "1.47"  
  21. libパッチ:
  22. - グループ ID: "org.jenkins-ci.main"  
  23. アーティファクト ID: 「リモート処理」  
  24. ソース:
  25. git: https://github.com/jenkinsci/remoting.git
  26. システムプロパティ: {
  27. jenkins.model.Jenkins.slaveAgentPort: "50000"
  28. jenkins.model.Jenkins.slaveAgentPortEnforce: "true" }
  29. グルーヴィーフック:
  30. - タイプ: "init"  
  31. id: "initScripts"  
  32. ソース:
  33. dir: スクリプト
  34. カス:
  35. - ID: "jcasc-config"  
  36. ソース:
  37. ディレクトリ: jenkins.yml

8. Jenkins 共有ライブラリ

Groovy を使用して Pipeline を記述する場合、多くのコードが繰り返されることがよくあります。

Jenkins 共有ライブラリは関数レベルの共有を提供し、同じ関数ロジックのセットを異なるパイプライン間で再利用できるようにします。プラットフォーム構築や大規模な利用シナリオに適しています。パイプラインの書き込みを高速化するだけでなく、メンテナンスやスムーズなアップグレードも容易になります。

  1. @Library( 'utils' ) org.foo.Utilities をインポートします
  2. def utils = 新しいユーティリティ(これ)
  3. ノード {
  4. utils.mvn 'クリーンパッケージ'  
  5. }

9. 参考文献

  • https://www.jenkins.io/zh/doc/book/pipeline/shared-libraries/
  • https://github.com/jenkinsci/configuration-as-code-plugin
  • https://github.com/jenkinsci/custom-war-packager
  • https://zhuanlan.zhihu.com/p/370241822

<<:  大手メーカーの分散ID設計ソリューションをいくつかご紹介します

>>:  分散型グローバル一意 ID スキームはそんなにたくさんあるのでしょうか?

推薦する

より良い運用方法を教えます、WeChat SEO モデルに関する 8 つの実用的なヒント!

地下鉄が混み合っているため、毎朝9時にバックパックを背負って出かけます。携帯電話を取り出して昨日の記...

Canalys: 世界のクラウドコンピューティング支出は418億ドルに達する

市場調査会社カナリスは最近、企業がパンデミックを乗り切るためにインターネットに大きく依存したため、ク...

サイトのBaiduの重みに影響を与える3つの主な理由の分析

PRは長い間、サイトの品質を測る直感的なデータとして利用されてきましたが、PRの更新が遅くなるにつれ...

馬華クラウド:香港CN2クラウドサーバー、1元から、1Gメモリ/1コア/50gSSD/2M帯域幅/5g防御

Mahua Cloudは現在、香港のクラウドサーバーのスーパーフラッシュセールを開催しており、香港C...

Weiboマーケティングの特徴を理解し、Weiboマーケティングをうまく活用しましょう

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスWeiboマーケティング...

マルチクラウドの世界におけるプライベートクラウドの役割

クラウド ファーストは現在、アプリケーションの近代化と移行の指針となっており、クラウド ネイティブは...

Baidu百科事典の外部リンクの構築に関する簡単な議論

みなさんこんにちは。私はHongtu Internetです。検索エンジン最適化の専門家ならご存知のと...

CIO やその他の IT リーダーがエッジ コンピューティングを活用してビジネスを強化するための 4 つの鍵

現在、ますます多くの CIO やその他の IT リーダーがエッジ コンピューティング戦略の開発を開始...

質問しながら分散システムのデータシャーディングを学ぶ

文章前回の記事では、分散システム (特に分散ストレージ システム) が解決する必要がある 2 つの主...

maple-hosting: オランダの苦情耐性サーバー、$389、AMD Epyc 7313/64g メモリ/16T SSD/1Gbps 専用フルデュプレックス

Maple-hosting (2008~) は、オランダの有名なサーバープロバイダーです。オランダの...

SEOとは何か、SEOはどのように機能するのか

SEOとは何ですか?また、どのように機能しますか? SEO は検索エンジン最適化の略で、 Googl...

大手企業のナビゲーション Web サイトは変化しており、私たち草の根の Web サイトも適切な変更を行うべき時が来ています。

使ったことがある友人は皆、ナビゲーションサイトという概念を知っていると思います。実は、厳密に言えば、...

DEDECMS サイトの検索機能に関する実用的なヒント

Dedecms は現在最も広く使用されているオープンソースのウェブサイト構築システムです。統計による...

KEDA を使用して Kubernetes で自動エラスティック スケーリングを実現する方法を学びます

こんにちは、皆さん。私はルガです。今日は、クラウド ネイティブ エコシステムに関連するテクノロジーで...