Jenkinsって何?

要約

Jenkinsは古くさいオンプレ前提のCI/CDツールらしい。が、まだまだ現役。

そうはいっても、カスタマイズ性とセキュリティの観点で、今でも使われている。しかし、カスタマイズ性の高さゆえにルール整備などが大変で、気づいたら属人性が高くなってしまうというデメリットもあるらしい。
また、アプリのビルドプロセスなんかは、Bitriseというサービスもあるらしいが、高度なことをしようとするとカスタマイズ性が高く、Jenkinsもまだまだ現役。アプリのCI/CDに最適化されたデファクトスタンダードなサービスが少ないがゆえかもしれない。

▼昔のオンプレ前提のツール群(2015年頃)
プロジェクト管理ツール:Redmine
バージョン管理ツール:Subversion
CI/CDツール:Jenkins
がオンプレ前提の昔の三種の神器のような感じ。

▼今なら、下あたりがクラウド前提のモダンな構成っぽい。(2025年現在)
プロジェクト管理ツール:Notion、JIRA、Backlog
バージョン管理ツール:Github
CI/CDツール:Github Actions、Circle CI

CI/CDツールって何?はここでは触れません。

Jenkinsとは何か?

主な使い方

Gitにプッシュしたら、自動的にビルドして、自動でテストして、問題なければ、自動でデプロイする。のような使い方をする。Dockerコンテナ上にJenkins環境をつくってそれを利用するような構成もできる。

Jenkins は、ソフトウェア開発におけるビルド、テスト、デリバリー、デプロイメントといった一連の作業を自動化するために設計された、オープンソースの自動化サーバーです 。自己完結型であり、Java ランタイム環境(JRE)がインストールされていれば、どのようなマシン上でも動作します。ネイティブなシステムパッケージとしてのインストール、Docker コンテナ内での実行、あるいは単独のアプリケーションとしての起動など、多様な方法で利用できる点が特徴です

Jenkins の主な目的は、継続的インテグレーション(CI)と継続的デリバリー(CD)のプラクティスを支援し、ソフトウェア開発プロセス全体を効率化することにあります 。開発者がコードの変更を共有リポジトリに頻繁にコミットするたびに、Jenkins は自動的にその変更を検出し、ビルド、テストを実行します。これにより、早期に問題を発見し、迅速なフィードバックを開発者に提供することが可能になります。さらに、テストに合格したソフトウェアは、自動的にステージング環境や本番環境にデプロイされるように構成することもでき、リリースサイクル全体の迅速化と品質の向上が期待できます。  

Jenkins の柔軟なインストールオプションは、様々な運用環境への適応性の高さを物語っています。ユーザーは、既存のインフラストラクチャや技術スタックに合わせて、最適な導入方法を選択できます。たとえば、小規模なプロジェクトであればスタンドアロンで簡単に起動できますし、大規模なエンタープライズ環境であれば、より堅牢な構成やスケーラビリティを考慮した導入が可能です。このように、Jenkins は幅広いユーザー層と多様な利用シナリオを想定して設計されていると考えられます。

Jenkinsの機能について

Jenkinsの機能①:Jenkinsパイプラインでビルド、テスト、デプロイなどの一連の流れを自動化

Jenkins パイプラインは、ソフトウェアのビルド、テスト、デプロイメントといった一連のステップを自動化するための強力な機能です 。パイプラインを使用することで、複雑なワークフローを視覚的に表現し、それぞれのステップの実行順序や依存関係を明確に定義することができます。  

パイプラインの定義は、通常「Jenkinsfile」と呼ばれるテキストファイルに記述されます 。この Jenkinsfile は、プロジェクトのソースコードと一緒にバージョン管理システム(例えば Git)で管理されることが一般的です。これにより、パイプラインの定義自体もコードとして管理され、変更履歴の追跡やレビューが可能になります。また、Jenkinsfile を使用することで、異なるブランチやプルリクエストに対して、自動的にパイプラインを作成し、実行するように設定することもできます 。

パイプライン機能は、複雑なソフトウェア開発ワークフローを可視化し、自動化するための強力な手段を提供します。コードとしてのパイプラインは、パイプライン自体のバージョン管理、レビュー、および再利用を可能にし、開発チーム全体でのコラボレーションを促進します。特に、大規模なプロジェクトや複数の開発者が関わる環境においては、パイプラインの自動生成機能は、開発プロセスの一貫性と効率性を高める上で非常に重要な役割を果たします。

Jenkinsの機能②:豊富なプラグインを利用して様々なツールとの連携が可能

Jenkins の大きな特徴の一つであり、強みとなっているのが、その豊富なプラグインエコシステムです 。Jenkins は、1000 を超える多様なプラグインを提供しており、これらのプラグインを利用することで、Jenkins の機能を柔軟に拡張し、様々なツールやサービスとの連携を容易に行うことができます。  

利用可能なプラグインは、ソースコード管理システム(Git、Subversion など)、ビルドツール(Maven、Ant など)、テストフレームワーク(JUnit、TestNG など)、デプロイメントツール(Docker、Kubernetes など)、通知システム(メール、Slack など)、監視ツールなど、ソフトウェア開発ライフサイクルのあらゆる側面をカバーしています 。これらのプラグインを組み合わせることで、ユーザーは自身の特定のニーズやワークフローに合わせて Jenkins をカスタマイズすることができます。  

プラグインエコシステムは、Jenkins の機能を拡張するだけでなく、ユーザーインターフェースの外観を変更したり、新しい機能を追加したりすることも可能です 。このプラグインの豊富さこそが、Jenkins が様々な技術スタックや開発プロセスに対応できる汎用性の高いツールである理由の一つと言えるでしょう。ユーザーは、プラグインを利用することで、既存のツールチェーンを最大限に活用し、効率的な CI/CD 環境を構築することができます。

Jenkinsの機能③:分散ビルドで負荷を分散してビルド時間を大幅に短縮できる

Jenkins は、大規模なプロジェクトや頻繁なビルドのニーズに対応するために、分散ビルドをサポートしています 。この機能により、ビルド、テスト、デプロイメントなどの作業を複数のマシンに分散させることができ、全体の処理時間を大幅に短縮することができます。  

Jenkins の分散ビルドは、一般的にマスター・エージェント(旧マスター・スレーブ)と呼ばれるアーキテクチャを採用しています 。マスターノードは、ジョブのスケジューリングや管理、設定の保存など、Jenkins システム全体の制御を担当します。一方、エージェントノードは、実際にビルドやテストなどの処理を実行する役割を担います。  

このアーキテクチャにより、複数のエージェントノードを連携させることで、大量のビルド要求を効率的に処理することが可能になります。また、エージェントノードは、異なるオペレーティングシステムやソフトウェア構成を持つマシンで実行することもできるため、様々な環境でのビルドやテストをサポートすることができます 。分散ビルド機能は、リソースの効率的な利用を促進し、単一障害点のリスクを軽減する効果も期待できます。

Jenkinsの機能④:ジョブのリアルタイム監視、ビルド履歴など充実したレポート監視機能

ジョブの実行状況は、ウェブインターフェースを通じてリアルタイムに監視することができ、失敗したビルドを迅速に特定し、トラブルシューティングを行うことができます 。また、ビルド履歴、テスト結果、コードカバレッジ、パフォーマンス指標など、包括的なレポートと監視機能を提供しており 、開発チームはこれらの情報を活用して、プロセスの改善や品質の向上に役立てることができます。

Jenkinsの機能⑤:堅牢なセキュリティ機能

セキュリティ面では、ユーザー認証、ロールベースのアクセス制御、LDAP や Active Directory などの外部セキュリティシステムとの統合など、堅牢なセキュリティ機能を提供しており 、エンタープライズ環境での利用においても安心して利用できる基盤が整っています。

Jenkinsの機能⑥:様々なビルドトリガーに対応

Webhook を利用したバージョン管理システムへのコードコミット時の自動トリガー、スケジュールに基づいた定期的なビルド、特定のビルド URL へのリクエストによる手動トリガー、他のビルドの完了後や他のビルドからの呼び出しによるトリガーなど、多様な方法でビルドを開始することができます 。これらの豊富なビルドトリガーオプションは、様々な開発ワークフローへの柔軟な対応を可能にします。

Jenkinsの機能まとめ

機能名説明
継続的インテグレーション(CI)と継続的デリバリー(CD)コード変更の自動的なビルド、テスト、統合、およびデプロイメントをサポートし、ソフトウェア開発プロセスを効率化します。
パイプラインビルド、テスト、デプロイメントなどの一連のタスクをコードとして定義し、自動化します。
プラグインエコシステム1000 を超える豊富なプラグインにより、様々なツールやサービスとの統合が可能になり、Jenkins の機能を柔軟に拡張できます。
分散ビルドとマスター・エージェント構成複数のマシンに作業を分散してビルドを高速化し、大規模なビルドファームを管理するためのアーキテクチャを提供します。
レポートと監視ビルド履歴、テスト結果、コードカバレッジなどの包括的なレポートを提供し、開発プロセスを監視および分析できます。
セキュリティユーザー認証、ロールベースのアクセス制御、外部セキュリティシステムとの統合など、堅牢なセキュリティ機能を提供します。
豊富なビルドトリガーWebhook、スケジュール、手動実行など、様々な方法でビルドをトリガーできます。

Jenkinsの使い方(基本編)

主な使い方

ジョブを作成して、ソースコード管理でGitなどのリポジトリを指定して、トリガーの設定してビルド実行を開始。トリガー起動直後のビルド前に環境設定などの事前処理を挟んだり、ビルド後にレポート作成などの事後処理を挟んだりできる。

ジョブを作成する

Jenkins を使用してソフトウェア開発プロジェクトの自動化を開始するには、まず「ジョブ」を作成する必要があります 。Jenkins は、フリースタイルプロジェクト、パイプライン、外部ジョブなど、様々な種類のジョブをサポートしています。ユーザーは、プロジェクトの特性や自動化の目的に合わせて適切なジョブの種類を選択することができます。

ジョブの作成は、Jenkins のウェブインターフェースを通じて簡単に行うことができます。ダッシュボード上にある「新しいアイテム」をクリックし、ジョブの名前を入力し、ジョブの種類を選択するだけで基本的な作成は完了です。

作成したジョブの設定画面では、さらに詳細な設定を行うことができます 。例えば、「ソースコード管理」のセクションでは、プロジェクトのソースコードが管理されているリポジトリ(Git、Subversion など)の URL や認証情報などを設定します。「ビルドトリガー」のセクションでは、どのような条件でビルドを自動的に開始するか(例えば、コードがリポジトリにプッシュされた時、定期的なスケジュールでなど)を設定します。「ビルド環境」のセクションでは、ビルドを実行する前に必要な環境設定(例えば、特定のソフトウェアのインストールなど)を行います。「ビルドステップ」のセクションでは、実際に実行するビルド処理(例えば、ソースコードのコンパイル、テストの実行など)を定義します。「ポストビルドアクション」のセクションでは、ビルドが完了した後に実行する処理(例えば、テスト結果のレポートの生成、成果物のアーカイブ、他のジョブのトリガーなど)を設定します。

自動ビルドと手動ビルド

作成および設定された Jenkins ジョブは、手動または設定されたトリガーに基づいて実行することができます 。手動でビルドを開始するには、ジョブのダッシュボードから「ビルド実行」ボタンをクリックします。自動トリガーが設定されている場合は、指定された条件(例えば、コードのコミット)が満たされると、自動的にビルドが開始されます。

まとめ

トリガーを設定していれば自動でビルドされるが、手動でビルドを実行することも可能。

ビルド状況の監視

ビルドの進行状況は、Jenkins のウェブインターフェースでリアルタイムに監視することができます 。ジョブの詳細画面では、現在のビルドのステータス(成功、失敗、実行中など)や、各ステップの実行状況、経過時間などが表示されます。  

ビルドが完了すると、その結果(成功または失敗)や、コンソール出力、実行されたテストの結果などの詳細な情報が提供されます 。コンソール出力には、ビルドの各ステップで実行されたコマンドやその出力が表示され、エラーが発生した場合には、その詳細を確認することができます 。テスト結果のレポートは、設定されたテストフレームワークに応じて、成功したテストの数や失敗したテストの詳細などが表示されます。  

ビルドの実行と監視機能は、開発者がビルドの状況を常に把握し、問題発生時には迅速に対応することを可能にします。リアルタイムでの監視と詳細なログ情報は、効率的なトラブルシューティングに不可欠であり、ソフトウェア開発の迅速性と品質の向上に貢献します。 

Jenkinsの使い方(その他)

Jenkins の全体設定と管理

Jenkins システム全体の構成や管理は、「Manage Jenkins」メニューから行うことができます 。このメニューには、システム設定、プラグイン管理、ユーザー管理、セキュリティ設定など、Jenkins を運用する上で重要な様々な管理機能が集約されています。  

「システム設定」のセクションでは、Jenkins のホームディレクトリの場所、Jenkins が使用するポート番号、Java の実行可能ファイルのパスなどを設定することができます 。これらの設定は、Jenkins の基本的な動作環境を定義するものであり、環境に合わせて適切に設定する必要があります。  

「プラグイン管理」のセクションでは、Jenkins の機能を拡張するための新しいプラグインのインストール、すでにインストールされているプラグインのアップデート、不要になったプラグインのアンインストールなどを行うことができます 。プラグインは、Jenkins の機能を柔軟に拡張するための重要な要素であり、プロジェクトのニーズに合わせて適切なプラグインを選択し、管理することが重要です。  

Jenkins の管理機能は、システムの安定性とセキュリティを維持するために非常に重要です。プラグイン管理機能を通じて、Jenkins の機能を最新の状態に保ち、セキュリティ上の脆弱性に対処することもできます。中央集権的な管理インターフェースは、複数の Jenkins インスタンスを効率的に運用する上で役立ちます。

ユーザーとアクセス権限の管理

Jenkins では、システムにアクセスするユーザーアカウントを作成し、管理することができます 。ユーザーアカウントを作成することで、各ユーザーの操作履歴を追跡したり、アクセス権限を個別に設定したりすることが可能になります。  

Jenkins は、ロールベースのアクセス制御(RBAC)をサポートしており、ユーザーやグループに対して、システム全体または特定のジョブに対する操作権限を細かく設定することができます 。例えば、特定のユーザーにはジョブの閲覧権限のみを与え、別のユーザーにはジョブの実行や設定変更の権限を与えるといった設定が可能です。  

このようにアクセス権限を適切に管理することで、Jenkins のセキュリティを強化し、不正なアクセスや誤操作によるシステムへの影響を防ぐことができます 。きめ細かいアクセス制御は、機密性の高いプロジェクトや大規模なチームでの利用において特に重要となります。組織のセキュリティポリシーに合わせて、適切なアクセス権限を設定することが推奨されます。

Jenkinsのデフォルトのサイトマップ

Jenkins(トップ)  
├── 新規ジョブ作成  
├── ユーザー一覧  
├── ビルド履歴  
├── プロジェクト相関図  
├── ファイル指紋  
├── 認証情報  
│   ├── ドメイン一覧  
│   └── 新規クレデンシャル登録  
└── Jenkinsの管理  
    ├── プラグイン管理  
    │   ├── 利用可能  
    │   ├── インストール済み  
    │   └── 高度な設定  
    ├── ノード管理  
    │   ├── ノード一覧  
    │   └── 新規ノード追加  
    ├── システム設定  
    ├── グローバルセキュリティ設定  
    ├── 設定の変更履歴(※プラグイン由来)  
    └── システム情報  

Jenkins用語

用語説明
ジョブ(Job)/ パイプライン(Pipeline)Jenkinsで実行する処理の単位。ジョブは従来の定型的なビルド設定で、パイプラインはより柔軟にスクリプトベースで複雑な処理を定義できる。
ビルド(Build)ジョブやパイプラインが一度実行されること。コードの取得、テスト、ビルド、デプロイなどの作業を含む。
ノード(Node)/ エージェント(Agent)Jenkinsがビルドを実行するマシン。通常、Jenkinsの本体は「マスター(コントローラー)」と呼ばれ、それ以外の実行用マシンは「エージェント」と呼ばれる。
ラベル(Label)ノードに割り当てるタグ。特定のラベルを持つノードでのみジョブを実行するように設定できる。
ステージ(Stage)パイプライン内で処理を段階的に分けるための単位。例:Checkout → Build → Test → Deploy。
ステップ(Step)ステージ内で実行する具体的な処理。例:sh ‘npm install’ や git clone など。
SCM(ソースコード管理)GitやSubversionなど。JenkinsはSCMからソースコードを取得してビルドを実行する。
Webhooks(ウェブフック)GitHubなどのリポジトリサービスからJenkinsに通知を送る仕組み。コードが更新されたときにJenkinsが自動でジョブを開始するのに使われる。
ビルドトリガー(Build Trigger)ジョブやパイプラインを開始する条件。時間(cron)、SCMの変更、他のジョブの成功時など。
アーティファクト(Artifact)ビルドの結果として生成されるファイル。例:実行ファイル、ログファイルなど。Jenkinsで保存・配布可能。
プラグイン(Plugin)Jenkinsの機能を拡張するためのモジュール。SCM連携、通知、UI拡張など、様々な用途に使える。
クレデンシャル(Credentials)パスワードやAPIトークンなどの機密情報を安全に管理するための仕組み。SCMやクラウドサービスとの連携時に使用。
Blue OceanJenkinsのUIをより直感的にしたプラグイン。パイプラインの視覚的な表示や操作がしやすくなる。

公式ドキュメント・参考サイト

Jenkins公式サイト:https://www.jenkins.io

Jenkins公式ドキュメント:https://www.jenkins.io/doc/