はじめに
Jenkinsは、継続的インテグレーション/継続的デリバリー(CI / CD)環境を作成するためのプラットフォームです。このシステムは、プログラムを開発および展開する際のパイプラインの作成を支援するために、さまざまなツール、言語、および自動化タスクを提供します。
Jenkinsはいくつかの自動化ステップのスクリプトを作成する必要がありますが、このプログラムはソフトウェア開発ライフサイクルを体系化するための高速で堅牢な方法を提供します。
Jenkinsの詳細と、Jenkinsが今日の主要なDevOpsツールの1つである理由については、読み続けてください。
Jenkinsの定義
Jenkinsは、Javaで記述された自動化サーバーであり、ソフトウェアの構築、テスト、および継続的なデプロイを支援します。オープンソースシステムは現在、主要な自動化サーバーの1つです。
一般的に、ジェンキンスは以下のサポートを提供します:
- Gitなどのさまざまなバージョン管理ツール。
- AntおよびApacheMavenベースのプロジェクトの構築。
- BashスクリプトとWindowsバッチファイルの実行。
ジェンキンスの短い歴史
Jenkinsプロジェクトは、2004年にHudsonという名前で開始されました。 Sunシステムで働いていた開発者の川口耕介は、継続的インテグレーションを実行する方法を作成したいと考えていました。アイデアは、ビルドの中断を避けるためにコミットする前にコードをテストすることでした。
このアイデアは成功し、すぐにチームの他のメンバーに広まりました。その結果、Kohsuke KawaguchはJenkinsプロジェクトを作成し、プログラムをオープンソース化しました。使用量は世界中に広がり、現在の見積もりは160万ユーザーです。 。
Jenkinsは何に使用されますか?
Jenkinsは継続的インテグレーションツールとしてスタートしましたが、現在の使用は、展開を含むソフトウェア配信パイプライン全体をカバーしています。
このプログラムは、Apache TomcatなどのWebコンテナーとプラグインを実行し、ライフサイクルとアクセス権の要求を管理するのに役立ちます。 Jenkins用の1700以上のプラグインは、ソフトウェアの統合、自動化、配信プロセスを強化し、カスタマイズ可能な環境を提供します。
Jenkinsコア用語
Jenkinsは、さまざまなパイプラインの作成および管理オプション全体でさまざまなDevOps用語を網羅しています。以下は、いくつかの一般的な用語とその定義のリストです。
Jenkinsパイプライン
Jenkins Pipelineは、継続的デリバリーパイプライン用のユーザー作成モデルです。パイプラインには、バージョン管理からユーザーまでの手順ステップを定義するのに役立つさまざまなプラグインが組み込まれています。
すべてのソフトウェアの変更とコミットは、リリース前に複雑なプロセスを経ます。この方法には、3つのステップが含まれます :
- 自動化された構築 。
- マルチステップのテスト 。
- 展開 手順。
Jenkinsには、パイプラインを作成する2つの方法があります。 :
- ユーザーインターフェイスから直接パイプラインを定義します。
- パイプラインをコードとして使用 方法論とJenkinsfileの作成 。テキストファイルは、Groovy互換の構文を使用して、パイプラインプロセスを定義します。
Jenkinsfile 構文は宣言型のいずれかです またはスクリプト 。
基本的な宣言型 Jenkinsfile パイプラインは理解しやすいです。例は次のようになります:
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building…'
}
}
stage('Test') {
steps {
echo 'Testing…'
}
}
stage('Deploy') {
steps {
echo 'Deploying...'
}
}
}
}
コードには次の要素があります:
- 必須の
pipeline { }
ブロックはJenkinsパイプラインプラグインを呼び出します。 - キーワード
agent
パイプラインが実行される場所、any
を定義します パイプラインが利用可能なエージェントで実行されていることを示します。 stages { }
ブロックは、パイプラインが実行されるシーケンスを表します。- コードには3つの段階があります:
Build
、Test
およびDeploy
、それぞれにそれぞれのsteps { }
。 steps { }
ジェンキンスに特定の時点で何をすべきかを伝えます。
スクリプト Jenkinsfileに相当します 次のようになります:
node {
stage('Build') {
echo 'Building…'
}
stage('Test') {
echo 'Testing…'
}
stage('Deploy') {
echo 'Deploying…'
}
}
Jenkinsfileをソース管理ツールにチェックインすると、チーム全体で配信パイプラインの手順を編集、確認、調整できます。
継続的インテグレーション
継続的インテグレーションは、適用された各変更が自動ビルドテストを呼び出すソフトウェア開発手順です。このプロセスにより、コードがバグなしで機能する実行可能フォームに統合されます。
継続的インテグレーションは、複数の開発者がいる環境では不可欠な側面です。各開発者はコードに変更を加え、各変更には潜在的な問題があります。
Jenkinsなどの継続的インテグレーションツールは、本番環境に変更を適用する前に、問題をテスト、特定、および対処するのに役立ちます。
自動テスト
Jenkinsの自動テストは、テストの実行をプリセットし、結果を保存します。アイデアは、コードがさまざまなシナリオで機能することを確認することです。いくつかのJavaバージョンやオペレーティングシステムなど、個別の環境用の自動テストを作成すると、後のリリースでの問題を予測して防止するのに役立ちます。
自動テストフェーズは、JenkinsのCIパイプラインにシームレスに組み込まれています。さまざまなプラグインは、ユニット、統合、機能、および回帰テストを実行し、後で表示および分析するために結果を保存するのに役立ちます。
コントローラー(以前のマスター)
Jenkinsアーキテクチャは、分散ビルドに対応しています。 1つのノードは、コントローラーと呼ばれる中央制御装置およびオーガナイザーです。
コントローラは、Jenkins構成が存在する中心的なプロセスです。以前はマスターと呼ばれていたJenkinsコントローラーは、エージェントとその接続を管理し、プラグインの読み込みを支援し、プロジェクトフローを調整します。
エージェント(以前のスレーブ)
エージェントはJenkinsコントローラーに接続してプロジェクトを実行します。エージェントは、ベアメタルクラウドインスタンス、Dockerイメージ、Kubernetesクラスターなどの物理マシンまたは仮想マシンにJavaをインストールする必要があります。
Jenkinsのエージェントは、ビルドの負荷を分散し、コントローラーとは別に安全な環境を作成することで、パフォーマンスを向上させます。
ノード
ノードは、実際の役割に関係なく、エージェントとコントローラーの総称です。プロジェクトとパイプラインを構築する機能を備えたマシンはすべてJenkinsノードであり、コントローラーは組み込みノードと呼ばれます。 。
組み込みノードは、接続されているすべてのノードの状態を監視し、値がしきい値を超えた場合にそれらをオフラインにします。
プロジェクト(以前のジョブ)
Jenkinsプロジェクト、つまりジョブは、特定の目標を持つユーザー作成の自動化手順です。 Jenkinsはデフォルトでさまざまなビルドジョブを提供しており、プラグインを介してさらに多くのジョブを利用できます。
以下は、いくつかのプロジェクトタイプの簡単な説明を含む表です。
プロジェクト | 説明 |
---|---|
フリースタイル | 複数の操作を伴う無制限のビルドタスク。 |
パイプライン | 複数のビルドエージェントを使用したマルチステッププロジェクト。 |
マルチ構成 | 複数のテスト環境と異なる構成を持つプロジェクト。 |
マルチブランチパイプライン | ソース管理管理システムのブランチに従ってパイプラインプロジェクトのセットを作成するプロジェクト。 |
ビルド
Jenkinsでは、ビルドは現在の構成でのジョブの単一実行を表します。ビルドは、プロジェクト手順で定義されたさまざまなソースからソフトウェアを作成します。プロジェクトに応じて、ビルドメカニズムには次のものが含まれます。
- 依存関係の収集。
- コードのコンパイルまたは変換。
- アーカイブ資料。
- テスト。
- さまざまな環境への導入。
したがって、ビルドは、さまざまなステップを含む定義済みプロジェクトの1回の実行です。
Jenkinsはどのように機能しますか?
Jenkinsは、統合から展開までの開発ステップを実行します 、すべてのステップを自動化します。
開発者がソースコードリポジトリへのコミットを公開するたびに、Jenkinsはビルドをトリガーします。通常、コミットは開発ブランチに投稿されます。
ビルド手順には、コードのテスト、ビルドが中断しないことの確認が含まれます。エラーが発生した場合、Jenkinsはそれに応じて行動するように開発者に通知します。すべてのテストに合格すると、パイプラインは統合手順に進みます。
統合には時間がかかり、複数のシステム構成に対してコードをテストする必要があります。 Jenkinsは、さまざまなノードで並列統合テストを実行し、コードの統合を試みるために必要な時間を短縮します。
パイプラインのさらに下流では、Jenkinsはユーザー受け入れテストを自動化します。これは展開前の要件です。すべてのテストに合格すると、コードはメインブランチにマージされ、ユーザーがコードを利用できるようになります。
Jenkinsの機能
Jenkinsの主な機能は次のとおりです。
- 簡単なインストール 。 Javaベースのプログラムは自律的で、プラットフォームに依存しません。
- 設定が簡単 。ユーザーフレンドリーなWebインターフェイスにより、構成が簡単になります。初めてのセットアップについては、Jenkinsチュートリアルを参照してください。
- 大規模なプラグインの可用性でカスタマイズ可能 。現在、Jenkinsの機能を拡張するために利用可能なプラグインは1700を超えています。不足している機能については、追加の外部プラグインまたはカスタムメイドのプラグインをインポートしてください。
- オープンソース 。 Jenkinsは完全にオープンソースであり、無料で使用できるため、実装が安価なテクノロジーになっています。
Jenkinsのメリットとデメリット
Jenkinsには、特定の長所と短所があります。以下は、Jenkinsを使用することの長所と短所の両方の詳細な概要です。
Jenkinsのメリット
Jenkinsに付属するいくつかの利点は次のとおりです。
- より速い開発サイクル 。すべてのコミットでビルドとテストを行うと、バグを取り除くためのペースの速い環境が作成されます。新機能とリリースは、より早く、より少ないエラーでエンドユーザーに届きます。
- コードを統合する時間が少ない 。 Jenkins以前は、コード統合は手動プロセスであり、コードのデバッグは複雑でした。動作するバージョンに到達するには、さまざまなコミットを実行し、問題を分析する必要があります。 Jenkinsを使用する場合、各コミット後に統合することで、プログラムの機能が常に利用可能で動作可能になります。
- 開発者向けのクイックフィードバック 。ビルドが中断するたびに、開発者は常に情報を入手します。フィードバックシステムは、開発チームが多数のコミットをデバッグする代わりに、問題に迅速に対処するのに役立ちます。
- 自動パイプラインワークフロー 。各コミットの自動テストは、パイプラインに直接統合されます。
Jenkinsのデメリット
Jenkinsを使用する場合のいくつかの欠点は次のとおりです。
- コストがかかる 。 Jenkinsは無料ですが、プログラムには安定した堅牢なインフラストラクチャが必要です。
- 定期的なメンテナンス 。 Jenkinsサーバーのメンテナンスには時間がかかります。パイプラインへのステージの追加、新機能によるサーバーのアップグレード、プラグインの更新の追跡には、管理者がサーバーを手動で再起動して管理する必要があります。
- 開発者中心 。プラットフォームは機能駆動型であり、開発者以外の人にとってはあまりユーザーフレンドリーではありません。 Jenkinsを使用する場合、開発者の経験は必須です。
Jenkinsのインストール方法
Jenkinsは、さまざまなオペレーティングシステムと環境で動作します。インストールは、次のようなさまざまな形式で利用できます。
- Windows、Ubuntu、Debian、CentOSなどの主要なオペレーティングシステム用のインストーラーパッケージ
- WARアーカイブファイル。
- Dockerイメージ。
- Kubernetesクラスター上。
- ソースコードのビルド。
Jenkinsは、スタンドアロンパッケージとして、またはJavaアプリケーションサーバー上で実行されます。ユーザーインターフェイスはWebベースであり、どちらの場合もRESTAPIが付属しています。