今日の優良食堂
実際に入れて動かして書いた、今日の一膳
ギット飯が代わりに導入・実行・コードまで確かめました
今日の優良食堂 · ギット飯が代わりに導入・分析

jenkinsci/jenkins

Javaで構築された、2,000以上のプラグインを備えたオープンソースの自動化サーバーです。

コミットを1つプッシュするだけで、ビルド・テスト・デプロイまで自動で流れていくパイプラインを、Groovyコードで自分の手で組み立てられます。静的解析やセキュリティ検査、性能テストも2,000件を超えるプラグインから選んで組み合わせれば、複雑な多環境デプロイの手順を丸ごと自動化できます。自社サーバーで動かすので構成を完全に把握でき、分散ビルドエージェントで負荷を分散しながら、コミュニティ主導のオープンな開発の恩恵もそのまま受け取れます。

01 / 概要
何をするものか一文で言うと
ひとことでJavaで構築された、2,000以上のプラグインを備えたオープンソースの自動化サーバーです。

Jenkinsは、ビルド・テスト・静的解析・デプロイなどソフトウェア開発の反復作業を自動化するオープンソースの自動化サーバーです。Javaで実装されたコア(core)と、CLI・Remoting・WAR配布を組み合わせたマルチモジュールMavenプロジェクトとして構成されています。2,000件を超えるプラグインでビルド以外の連携も拡張できます。

02 / 構造
どう動くのか中核のしくみ
読み方動きの流れを図と一緒にほどきました。

リポジトリはMavenのマルチモジュール構成で、core(hudson.model・Extensionなど拡張点)、cli(コマンドラインクライアント)、bom(依存バージョン管理)などに分かれています。core/pom.xmlはjenkins-bomから共通依存(Guava、XStream、Spring Frameworkなど)を継承し、Groovy・Antlr4(ラベル式やcron式のパーサー)・Jelly(画面テンプレート)を使ってビルド設定やUIを構築します。cli/src/main/java/hudson/cli/CLI.javaはWebSocket(Tyrus)やSSH(Mina sshd)経由でJenkinsサーバーに接続し、レスポンスヘッダー「X-Jenkins」の有無で接続先が本物のJenkinsか検証する仕組みになっています。ExtensionPoint・Extensionアノテーションによるプラグイン機構がコアの中心で、PluginManagerやClassicPluginStrategyがプラグインのロードと分離クラスローディングを担います。

03 / 体験
入れるとこんな体験になりますギット飯が実際にたどった順序
所要ギット飯が実際に導入・実行しながらたどった順序です。
  1. STEP 01

    mvnw(または既存Maven)で `mvn -pl war,core,cli -am package` を実行すると、core・cli・war各モジュールが順にコンパイルされ、依存解決にjenkins-bomが使われるのを確認します。

  2. STEP 02

    生成された `war/target/jenkins.war` を `java -jar jenkins.war` で起動すると、初回はセットアップウィザードとインストール用の初期管理者パスワードがコンソールに表示されます。

  3. STEP 03

    ブラウザで `http://localhost:8080` にアクセスすると、Jelly/Staplerベースの管理画面が表示され、推奨プラグインのインストール画面へ進みます。

  4. STEP 04

    `java -jar cli/target/cli-*.jar -s http://localhost:8080/ help` のようにCLIを実行すると、CLI.javaのverifyJenkinsConnectionがX-Jenkinsヘッダーを確認し、対象が本物のJenkinsでない場合はNotTalkingToJenkinsExceptionで終了します。

  5. STEP 05

    `mvn test -pl cli` を実行すると、CLIConnectionFactoryTestやHexDumpTestなどJUnit5ベースの単体テストが走り、Basic/Bearer認証ヘッダー生成やバイナリダンプ表示のロジックが検証されます。

04 / 成果物
何が手に入るのか導入後に手元に残るもの

手元には、単体で動くJenkins本体(war)と、そこに接続してジョブ操作やプラグイン管理を行えるCLIクライアントが揃います。coreモジュールのExtensionPoint機構により、2,000件規模のプラグインエコシステムへ接続できる土台が確認できます。

05 / 注意
ここは先に知っておいてください先に知っておくとよいこと
正直なところ誰にでも合うとは言いにくいところです。
01

core/pom.xmlやcli/pom.xmlに記載の依存バージョン(Spring Framework 7.0.9、Mina sshd 2.19.0など)はJavaの実行環境やメモリを一定量要求するため、フルビルドにはそれなりのマシンリソースと時間がかかります。

02

README記載のとおり公式配布はweekly版とLTS版の2系統があり、ソースから直接buildする場合はどちらのブランチ・タグを使うかで挙動が変わる可能性があります。

03

cli/src/test配下には鍵ファイル(dsa、rsa、ed25519など)が多数含まれており、SSH認証テストのために使われますが、これらは開発・テスト専用の想定で本番鍵として使い回すべきではありません。

06 / 結論
ギット飯の結論食べてみる価値のある一膳か
ギット飯の最終判断優良食堂

CI/CDパイプラインを自前でホストしたいチームや、既存のJenkins環境に対してCLI・API連携ツールを開発したいエンジニアに向いています。core・cli・bomという明確なMavenモジュール分割と、実際に動くJUnitテスト(CLIConnectionFactoryTestなど)がソース上で確認できるため、READMEの説明とコードの実装が一致していると判断できます。ソースツリーの規模と依存管理の緻密さから、個人の小規模自動化よりも組織的なビルドインフラ用途を想定した設計だと読み取れます。

今日の残りの一膳
SUBSCRIBER LIBRARY
これまでに検証した優良食堂を一堂に

4 つの関門を通った優良食堂がすべてバックナンバーに集まっています。いちばん新しい一膳はどなたでも無料で読め、それより前の優良食堂の検証の根拠・詳しい解説は ギット飯 プレミアムのご購読ですでに開いています。

優良食堂バックナンバー →
リポジトリ詳細🧪 ひと言で味見する