Jenkins入門メモ

jenkins触ったことがないのでメモしておきます。

Jenkinsとは? 〜 なぜ必要なのか? 〜

背景:ソフトウェア開発の自動化ニーズ

ソフトウェア開発では、開発者が各自のマシンでビルド・テストを行い、手動で成果物を共有・リリースする流れが一般的でした。しかし、以下のような問題が起こりやすいのです。

  • ビルドやテストの漏れ
    新しいコードが追加されても、テストを実行し忘れたり、ビルド環境が整っていなかったりすることでエラーを見逃す可能性がある。
  • 開発者間の連携不足
    マージして初めて衝突や不具合が発覚してしまい、後戻りコストが増大する。
  • リリース作業の手間とミス
    手動のリリースは作業手順が複雑な場合もあり、ヒューマンエラーや時間的コストがかかる。

このような課題を解決するために「継続的インテグレーション(CI)」や「継続的デリバリー/デプロイ(CD)」といった考え方が生まれました。

  • 継続的インテグレーション(CI): 開発者が頻繁にコードをマージし、ビルドとテストを自動で行うことで、バグやコンフリクトを早期に発見する手法。
  • 継続的デリバリー/デプロイ(CD): CIでテストを通過したコードを自動的に本番環境へデリバリー(リリース準備)もしくはデプロイする手法。

Jenkins誕生の経緯

Jenkinsは、こうした自動化ニーズに応えるために誕生しました。もともとは「Hudson」という名前で開発されていたオープンソースプロジェクトで、「ビルド・テストなどの繰り返し作業を自動化し、誰でも無料で使えるプラットフォームを作りたい」 という理念からスタートしています。

開発者がソースコードをプッシュ(push)したタイミングで自動的にビルドとテストを行い、問題があればすぐに通知する。これによって、手戻りを最小化し、開発速度と品質を同時に向上させる ことが狙いです。現在では世界中の企業・組織がJenkinsを活用しており、コミュニティ主導で活発に開発・拡張が続けられています。

Jenkinsのメリット

  1. 無料でオープンソース
    個人から大規模企業まで、ライセンスコストを気にせず利用可能。
  2. プラグインが豊富
    GitHubなどのバージョン管理システムやクラウドサービス、ビルドツールと連携しやすい。必要な拡張機能を自由に組み合わせられる。
  3. パイプライン管理
    Jenkinsfileを使うと、ビルドやテスト、デプロイのプロセスをコード化して一元管理できる(”Pipeline as Code”)。
  4. 大規模コミュニティ・豊富なドキュメント
    エラーや不具合にぶつかっても情報を探しやすく、公式ドキュメントやフォーラム、ブログ記事が非常に充実している。
  5. 導入が簡単で試しやすい
    Dockerなどを用いれば、手軽に環境を立ち上げられる。比較的軽量でローカルでもサーバーでも使いやすい。

Jenkinsの特徴

(※背景を補強するために、本章では1章で触れなかったJenkinsの概要をさらに簡単にまとめています。)

  1. CI/CDツールの代表格
    JenkinsはCI/CDを実現する代表的なツールで、導入実績が多く、成功事例も豊富。
  2. 幅広い言語・環境に対応
    Java、Node.js、Python、Goなど、さまざまな言語やフレームワークで活用できる。
  3. 豊富な設定オプション
    フリースタイル・ジョブからパイプラインまで、段階的に高度な使い方を学んでいける。
  4. チーム開発への応用
    ユーザー管理やジョブ権限設定などを組み合わせることで、複数人での利用がスムーズに行える。

環境構築:Jenkinsをセットアップしてみよう

必要なもの

  • Java(JenkinsはJavaで動作するため、Java 11 または Java 17 が推奨)
  • Jenkins本体(公式サイトよりダウンロード。あるいはDockerイメージなどを使用)

インストール手順(例:Dockerイメージを使う場合)

  1. Dockerのインストール
    • Mac:brew install --cask docker
    • Windows:Docker Desktopをインストール
    • Linux:各ディストリビューションのパッケージマネージャーを利用

Jenkins公式イメージを使ってコンテナ起動

docker run -d -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home --name jenkins jenkins/jenkins:lts

Jenkins初期設定

  • ブラウザで http://localhost:8080 にアクセスするとセットアップ画面が表示される。
  • 表示されるパスワードの場所(例:/var/jenkins_home/secrets/initialAdminPassword)を確認して入力。
  • 推奨プラグインをインストールし、管理者アカウントを作成。

ジョブの作成準備~プロジェクトを用意する

まずは、Jenkinsに登録するためのサンプルプロジェクトを用意します。
今回はJavaのビルドツールとしてGradleを使った例を示します。(Mavenでも考え方は同じです)

Gradleとは?

  • Gradle: JavaやAndroidなどのプロジェクトでよく使われるビルド自動化ツールです。
  • 依存ライブラリの管理・コンパイル・テスト実行・アーカイブ作成など、開発に必要な作業を自動化する設定を「build.gradle」というスクリプトファイルに定義します。

Gradleでビルドするためのサンプルプロジェクト

次に、Jenkinsでビルド・テストを試すためのJavaプロジェクトを用意します。ここでは Gradle Wrapper を使ったサンプル構成を紹介します。

Gradle Wrapperとは?

  • プロジェクト内に gradlew / gradlew.bat を置いておくことで、Jenkinsのコンテナ上に事前にGradleをインストールせずに 同じバージョンのGradleを使ってビルドできる仕組み。
  • ソース管理に gradlewgradle-wrapper.properties を含めておけば、他の開発環境やCI上でも同じ結果が得られる。

サンプルのファイル構成例

jenkins-test/
├── src
│ ├── main
│ │ └── java
│ │ └── example
│ │ └── App.java
│ └── test
│ └── java
│ └── example
│ └── AppTest.java
├── build.gradle
├── gradlew
├── gradlew.bat
└── gradle
└── wrapper
├── gradle-wrapper.jar
└── gradle-wrapper.properties
  • App.java: 「Hello World」を出力するメインクラス、加えてテスト用のメソッドをひとつ用意
  • AppTest.java: JUnit で App のメソッドをテスト
  • build.gradle: Javaプラグインの適用、JUnit依存の設定
  • gradlew / gradlew.bat: Gradle Wrapperの起動スクリプト
  • gradle-wrapper.properties: 使用するGradleのバージョン(例:8.5)の指定

リポジトリへコミット

この一式を、GitHubなど任意のGitリポジトリにプッシュします。
※最近はGitのデフォルトブランチが main になっていることが多いので、Jenkinsでビルドする際も main を指定 しましょう。

フリースタイル・ジョブを作成する

ここでは最もシンプルな「フリースタイル・ジョブ」を例に解説します。

新規ジョブの作成

  1. Jenkinsダッシュボードで「新規ジョブ作成」をクリック
  2. 「ジョブ名」を入力(例:test)し、「フリースタイル・プロジェクトの作成」を選択して「OK」

ソースコード管理の設定

  • ソースコード管理」セクションで「Git」を選択
  • リポジトリURL」に https://github.com/ユーザ名/jenkins-test.git のように入力
  • Branches to build」は */main に設定(デフォルトで */master になっているとエラーになる場合がある)

ビルドの設定

  • ビルド手順の追加」→「シェルの実行」を選択
  • 以下のように記述(Gradle Wrapperを利用)
./gradlew clean build

これで「クリーン→ビルド&テスト」がすべて動きます。

ビルド後の処理(JUnitテストレポートの集計)

  1. ビルド後の処理の追加」→「JUnitテスト結果の集計」を選択
  2. テスト結果XML」に **/build/test-results/test/*.xml と入力
  3. これでJenkins上でテスト結果を可視化できる

ビルド実行

  • 設定画面で「保存」をクリックして確定
  • ジョブ画面左側の「ビルド実行」で、すぐにビルドを走らせることができる

ビルドに成功すればチェックマークがつきます。×になればエラーが発生しています。

トラブルシューティング:よくあるハマりどころ

  1. ブランチ名の不一致
    • GitHubのデフォルトが main なのに、Jenkinsが master を探してエラーになるケース。
    • 対処:ジョブ設定の「Branches to build」を */main に修正。
  2. ./gradlew: not found エラー
    • Gradle WrapperファイルをGitにコミットし忘れている、または実行権限が付いていない。
    • 対処:gradle wrapper 実行後、gradlew, gradlew.bat, gradle/wrapperをGitに追加&プッシュ。chmod +x gradlewも忘れずに。
  3. JavaバージョンとGradleの非互換
    • 例えば、Gradleが古くてJava 17を認識できない (Could not determine java version)。
    • 対処:gradle-wrapper.properties を修正して、distributionUrl を新しいGradleに差し替える(例:8.5以上)。
  4. Jenkinsでテスト結果が表示されない
    • 「ビルド後の処理」でJUnitのレポートパスを正しく設定していない。
    • 対処:Gradleのテストレポート出力先(例:build/test-results/test/*.xml)を指定。

まとめと次のステップ

  • Jenkins+Dockerの組み合わせなら、CI環境を手軽にセットアップ可能。
  • Gradle Wrapperを使えば、わざわざコンテナにGradleをインストールする手間がなくなり、バージョンの互換性も保ちやすい。
  • フリースタイル・ジョブを動かしてみることで、ビルドとテストの自動化の基本を体験できる。

次のステップ

  1. パイプライン(Jenkinsfile)の活用
    • 「Pipeline」ジョブに切り替え、ビルドフローをスクリプトとして管理する
  2. デプロイの自動化
    • テストが成功した成果物をステージング環境や本番環境へ自動でリリースする
  3. プラグイン活用・通知機能
    • GitHub連携、Slack通知、Blue Oceanなど豊富なプラグインを使いこなす

おわりに

本記事では、Docker上で稼働するJenkinsを用い、Gradle WrapperでJavaプロジェクトをビルド・テストする最初の一歩を解説しました。
実際の現場で使うには、認証やアクセス制御、ビルドの並列化など多くの機能を活用する必要がありますが、まずは**「リポジトリを指定して、自動でビルドとテストを回せる」という成功体験**が重要とのことです。

Jenkinsの様々な使い方もまた記事にしようと思います。

タイトルとURLをコピーしました