何ですか Jenkins継続的インテグレーション(CI)ツールを使用する理由とは?

⚡ スマートサマリー

Jenkins は、開発者がコミットするたびにコードをビルドおよびテストするオープンソースの自動化サーバーであり、継続的インテグレーションを毎晩の面倒な作業から、勤務時間中継続的に実行されるプロセスへと変革します。

  • 🔘 目的: Jenkins コミットごとにビルド、テスト、デプロイの各ステップを自動的に調整します。
  • ☑️ 原産地: 2011年にHudsonからフォークされ、現在では最も広く導入されているCIサーバーとなっている。
  • ✅ パイプライン: A Jenkinsコードと共に保存されるファイルには、ビルドの各段階が定義されています。
  • 🧪 プラグイン: 2,000以上のプラグインが接続します Jenkins Git、Maven、Docker、Kubernetesに対応しています。
  • 🛠️ トレード・オフ: セルフホスティングは完全な制御権をもたらしますが、サーバー管理作業も伴います。

Jenkins 継続的インテグレーションサーバーの概要

何ですか Jenkins?

Jenkins オープンソースの継続的インテグレーションサーバーで、 Java 継続的インテグレーションプロセスを自動化された方法で実現するための一連のアクションを調整するため。 Jenkins ソフトウェアの構築、テスト、ドキュメント作成、デプロイ、その他ソフトウェア開発ライフサイクルの各段階を含む、ソフトウェア開発ライフサイクル全体をサポートします。

Jenkins は世界中で広く使われているアプリケーションで、インストール数は数十万件に達し、日々増加しています。 Jenkinsソフトウェア企業は、ソフトウェア開発プロセスを加速させることができます。 Jenkins ビルドとテストを迅速に自動化できる。

これはサーバーベースのアプリケーションであり、Apache TomcatのようなWebサーバーが必要です。 Jenkins このソフトウェアがこれほど人気になったのは、プロジェクト開発中に発生する繰り返しのタスクを監視できるからです。たとえば、チームが開発している場合、ping プロジェクト、 Jenkins プロジェクトのビルドを継続的にテストし、開発の初期段階でエラーを表示します。

注意: WARを展開する アパッチ Tomcatはまだ動作しますが、現在のリリースには組み込みのサーブレットコンテナが同梱されているため、 Jenkins 通常は単独で実行されます。2.555.x LTS ラインでは、 Java 21.

継続的インテグレーションとは何ですか?

継続的インテグレーション 複数の開発者によるコードの変更を XNUMX つのプロジェクトに何度も統合するプロセスです。 ソフトウェアはコードのコミット直後にテストされます。 コードがコミットされるたびに、コードがビルドされ、テストされます。 テストに合格すると、ビルドのデプロイメントがテストされます。 デプロイメントが成功すると、コードが実稼働環境にプッシュされます。

このコミット、ビルド、テスト、デプロイは継続的なプロセスであるため、継続的インテグレーション/デプロイメントと呼ばれます。

どのように Jenkins 動作しますか?

Jenkins サーバーベースのアプリケーションであり、Apache TomcatのようなWebサーバーを様々なプラットフォームで実行する必要があります。 Windows、Linux、 macOSUnixなどを使用するには Jenkinsパイプラインを作成する必要があります。パイプラインとは、一連のステップであり、 Jenkins サーバーが処理します。 Jenkins 継続的インテグレーションパイプラインは、コードやコードの変更をホスト、監視、コンパイル、テストするために設計された一連のツールで構成される強力なツールです。

  • 継続的インテグレーションサーバー(Jenkins, Bamboo, CruiseControl, TeamCity、 その他)
  • ソースコード管理ツール(例:CVS、SVN、GIT、Mercurial、Perforce、ClearCaseなど)
  • ビルドツール (Make、ANT、Maven、Ivy、 Gradle、 その他)
  • 自動化テストフレームワーク(Selenium, Appium, TestComplete, UFT、 その他)

現在のバージョンでは、これらのステップは Jenkinsコードの横にコミットされたファイル。 Jenkins コントローラーはそのファイルを読み込み、各段階をエージェントに渡します。エージェントとは、実際に作業を実行するマシンです。

Jenkins 沿革

  • 川口 幸介 Java SUN Microsystems で働く開発者は、コードの構築とエラーの修正を繰り返すことに疲れていました。2004 年に、ビルドとテストのタスクを自動化する Hudson という自動化サーバーを作成しました。
  • 2011年には、 Oracle Sun Microsystems の所有者は Hudson オープンソース コミュニティと紛争を起こしたため、Hudson をフォークして、 Jenkins.
  • ハドソンと Jenkins 独立して運営を続けていたが、短期間のうちに Jenkins 多くのプロジェクトと貢献者を獲得したが、ハドソンは32のプロジェクトしか抱えていなかった。時間が経つにつれて、 Jenkins 人気が高まったため、ハドソンはもはや維持管理されなくなった。

継続的インテグレーションを使用する理由 Jenkins?

昔ながらの開発方法はping ソフトウェアの方がより良い方法です。CIの利点を理解しましょう。 Jenkins 次の例で

共有リポジトリで作業している開発者が約10人いると想像してみましょう。ある開発者は25日でタスクを完了しますが、他の開発者は30日かかります。

作業前 Jenkins 後 Jenkins

すべての開発者が割り当てられたコーディング タスクを完了すると、全員が同時にコードをコミットしていました。 Laterビルドはテストされ、デプロイされます。

Code コミットは行われたものの、テストサイクルは非常にまれで、1回のビルドは数日後にしか行われなかった。

開発者がコードをコミットするとすぐに、コードはビルドされ、テストされます。 Jenkins 一日を通して何度もコードを構築し、テストします。

ビルドが成功した場合、 Jenkins ソースコードをテストサーバーにデプロイし、デプロイチームに通知します。

ビルドが失敗した場合、 Jenkins エラーが発生した場合は、開発チームに通知します。

コードは一度にビルドされるため、一部の開発者は、他の開発者がコーディングを完了するまでビルドを確認するまで待つ必要があります。 コードは、開発者がコミットした直後にビルドされます。
複数のコミットのエラーを切り分け、検出し、修正するのは簡単な作業ではありません。 コードは単一の開発者のコ​​ミットごとにビルドされるため、ビルド失敗の原因となったコードを特定するのは容易である。
Code ビルドして 試験工程 完全に手作業なので、失敗する可能性が非常に高いです。 自動化されたビルドとテストのプロセスにより、タイミングが節約され、欠陥が減少します。
すべてのエラーが修正されテストされると、コードがデプロイされます。 ビルドとテストが成功するたびに、コードがデプロイされます。
開発サイクルが遅い 開発サイクルは速いです。 ユーザーは新機能をより簡単に利用できるようになります。 利益が増加します。

継続的インテグレーションの実世界のケーススタディ

皆さんは古い携帯電話 Nokia をご存知だと思います。 Nokia は以前、夜間ビルドと呼ばれる手順を実装していました。 日中にさまざまな開発者が複数のコミットを行った後、ソフトウェアは毎晩ビルドされました。 ソフトウェアは XNUMX 日に XNUMX 回しかビルドされないため、大規模なコード ベースのエラーを切り分け、特定し、修正するのは非常に骨が折れます。

Laterそこで、彼らは以下に示すような継続的インテグレーションのアプローチを採用しました。開発者がコードをコミットするとすぐにソフトウェアがビルドされ、テストされます。エラーが検出された場合、担当開発者は迅速に不具合を修正できます。

Nokiaの夜間ビルドは、コミットをトリガーとする継続的インテグレーションサイクルに置き換えられました。

Jenkins プラグイン

デフォルトでは、 Jenkins 限られた機能セットが付属しています。 Jenkins Git などのバージョン管理ツールを使用してインストールする場合、Git に関連するプラグインをインストールする必要があります。実際、Maven などのツールとの統合には、 Amazon EC2 では、それぞれのプラグインをインストールする必要があります Jenkins以下のプラグインマネージャーが示すとおりです。

Jenkins プラグインマネージャーでインストール可能なプラグインの一覧が表示されます

使用のメリット Jenkins

  • Jenkins は非常にオープンなコミュニティによって管理されています。毎月、公開会議を開催し、開発のために一般市民からの意見を募っています。 Jenkins プロジェクト。
  • このプロジェクトは予測可能なリリースサイクルを維持しており、12週間ごとに新しい長期サポートのベースラインが選択され、その後、スケジュールされたパッチリリースが実施されます。
  • テクノロジーが成長するにつれて、 Jenkinsプラグインデータベースには現在2,000以上のプラグインが登録されています。プラグインにより、 Jenkins さらに強力になり、機能も豊富になります。
  • Jenkins このツールはクラウドベースのアーキテクチャもサポートしているため、 Jenkins クラウドベースのプラットフォームにおいて。
  • その理由 Jenkins 人気が出たのは、開発者が開発者のために作ったからである。

使用のデメリット Jenkins

しかし Jenkins 非常に強力なツールではあるが、欠点もある。

  • そのインターフェースは時代遅れで、現在のUIトレンドと比較するとユーザーフレンドリーとは言えないが、最近のリリースでは画面デザインの多くが現代化されている。
  • しかし Jenkins 多くの開発者に愛されているが、維持するのはそれほど簡単ではない。 Jenkins サーバー上で動作するため、その動作を監視するにはサーバー管理者としてのスキルが必要です。
  • 多くの人が実行しない理由の1つは Jenkins インストールと設定が難しいことが原因です。 Jenkins.
  • 継続的インテグレーションは、小さな設定変更が原因で定期的に中断します。 継続的統合は一時停止されるため、開発者の注意が必要です。
  • プラグインの依存関係の競合は、多数のプラグインが異なるタイミングでアップグレードされた場合に発生するため、プラグインのアップデートにはそれぞれ専用のメンテナンス期間が必要です。

もしそれらのトレードオフがあなたのチームにとって重要なら、 おすすめ! Jenkins 代替ツール そしてより広範なリスト 主要な継続的統合ツール 自社サーバーを導入する前に。

よくあるご質問

Yes. Jenkins MITライセンスの下でリリースされており、ダウンロードや実行に費用はかかりません。費用は間接的に発生します。それは、セルフホスト型コントローラーを正常に維持するために必要なサーバー、ストレージ、および管理者の時間です。

2.555.x 長期サポートラインは、 Java と21、 Java 25人も支持した。 Java バージョン2.555.1で17が削除されました。古いJDKではコントローラーが起動しないため、アップグレード前に要件を確認してください。

A Jenkinsファイルは、アプリケーション コードと共にコミットされるパイプライン定義を保持するテキスト ファイルです。宣言型構文またはスクリプト構文で記述でき、ping バージョン管理システムに組み込むことで、ビルドは他の変更と同様にレビュー可能になります。

コントローラーは Jenkins 作業スケジュールを設定し、Webインターフェースを提供するインストール環境。エージェントは、割り当てられたビルド手順を実行する独立したマシンであり、負荷分散と複数のオペレーティングシステム上でのビルドを可能にする。

機械学習モデルは、繰り返し発生する障害をクラスタリングし、真の回帰テストと不安定なテストを区別し、最も原因となっている可能性の高いコミットを特定します。これにより、長々としたコンソールログが、オンコール開発者にとって分かりやすい、優先順位付けされた短いリストに変換されます。

GitHubコパイロット コメントから宣言的な段階と共通の手順をドラフトする。 Revすべての提案を確認してください。なぜなら、コントローラーにインストールされていないプラグインのステップ名が頻繁に生成されるからです。

ホスト型サービスはサーバーのメンテナンスが不要で、起動も速い。 Jenkins ハードウェア、プラグイン、データロケーションを完全に制御できます。特殊なビルド環境を持つチームは通常、 Jenkins小規模プロジェクトでは、ホスト型ランナーが好まれることが多い。

はい。ビルド手順は呼び出すことができます。 達人, Gradle またはアリ、そして JUnit, TestNG or Selenium 結果はジョブページに反映されるため、テストスイートが失敗するとビルド全体が赤色で表示されます。