Jenkinsの概要について

ソフトウェア開発の現場において、高品質なソフトウェアを生み出す為にはQCD(クオリティ・コスト・デリバリー)の達成は必要不可欠です。

また、モバイル分野など日々飛躍的な発展を遂げている産業では、従来型開発プロセスよりもアジャイル開発を軸にしたプロジェクトが増加傾向にあります。

クライアントのニーズを満たす為にもQCDの遵守と効率的なソフトウェア開発が技術者に求められているということです。

JenkinsはXP(エクストリーム・プログラミング)手法において、CI(継続的インテグレーション)テストの自動化に欠かせないツールでしょう。

今回はアジャイル開発の「三種の神器」とも比喩されるJenkinsの使い方について解説していきます。


Jenkinsでできることと導入メリットについて

始めにJenkinsの使い方を解説していくにあたり、CIツールの導入メリットについて触れていきます。

事前に使用するツールの特性や利点を把握しておくことで実際の開発フェーズでもその恩恵を享受することができます。

Jenkinsの利便性を開発チーム内で再度認識・共有したことは将来的なQCDの実現にも繋がることでしょう。


豊富なプラグインによる高い拡張性

Jenkinsはオンプレミス型なのでサーバー管理や環境構築作業などのコストの発生が課題。

ですが、未だに幅広いシェアを持つJavaで書かれたツールであり、オープンソースであることも起因して多くのユーザーが利用しています。

また、1,600以上にも及ぶ豊富なプラグインによる拡張性にも優れているのも特徴。

日本ユーザー数が多いことで日本語による情報源の獲得が容易です。


プラットフォームに左右されない

JenkinsはサーバーのOSがLinuxやWindows、Mac OSであっても環境に左右されることなくインストール可能です。

この環境を選ばないという特徴もJenkinsのシェアが高い事情の一つです。サーバー上でJavaが動作する環境であればJenkinsは無料で利用できます。

しかし利便性があるとはいえ、Jenkinsを利用する開発チームが増えれば、必然的にサーバー側での処理や負荷は増えることになるでしょう。

そのためJenkinsが安定して動作できるように、使用するサーバーのキャパシティは確認しておく必要があります。


CI(継続的インテグレーション)の自動化

ソフトウェア開発のビルド・テスト・デプロイなどの継続すべき各工程を、コミットするタイミングにて自動的なフィードバックが可能です。

これにより、開発の進捗状況に応じてビルドしていく従来型の手法よりも、あらゆる不具合を早期発見・修正することが容易になります。


CD(継続的デリバリー)の自動化

CD(継続的デリバリー)はCIにおいてコードの変更やビルドの更新が発生した際のプロセスへ自動的に移行します。

CI/CDを活用すれば、技術者達は常に最適な状態に標準化されたプログラムステータスを共有化できます。


CI/CDの必要性

開発工程の運用テストなど最終局面で大きな不具合が検出され、大幅な改修や仕様変更が発生すると手戻りのロスが生じ製品リリースに遅れが発生します。

さらに従来型の開発手法である場合は手戻り作業が大きな損失に繋がりかねません。

そのため、クライアントが求める製品を綿密なヒヤリングの基、最適なプロジェクト選択とCI/CDの導入が昨今の開発環境においては重要視されています。


Jenkinsをインストールする手順

プラットフォームに左右されないJenkinsはLinuxからWindows・Mac OSでも動作可能です。

ここではMac OSを例にインストール方法を解説していきますが、Javaについては既に導入済という前提で解説を進めます。

Mac OSに導入する際、最もポピュラーなパッケージマネージャーは「MacPorts(マックポーツ)」か「Homebrew(ホームブルー)」です。

昨今ではHomebrewのトレンドを意識し、本稿では「Homebrew」を取扱います。


 始めに「Homebrew」のインストールを済ませる

HomebrewをMac OSにインストールするために下記のスクリプトを公式ホームページからコピーしてくる必要があります。

  • /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”

スクリプトをコピーした後、Mac OSで「Finder」を起動しましょう。

その後「アプリケーション」フォルダ ⇒「ユーティリティ」フォルダの順に開き、「ターミナル.app」をクリックして起動します。

ターミナル画面が起動したら、Homebrewの公式ホームページからコピーしてきたスクリプトをペーストして実行しましょう。

スクリプト実行後、ターミナル上のログで下記のように出力される場合もあるようです。


  1. ==> The Xcode Command Line Tools will be installed. Press RETURN to continue or any other key to abort

もし出力された場合にはRETURNキーを入力します。

この一連の作業ではHomebrewのインストールに必要な「Xcode Command Line Tools」がインストールされました。


実際にJenkinsのインストールを行う

Jenkinsをインストールするまでの準備が整いましたので、ターミナルで【brew install jenkins】のコマンドを実行しましょう。

コマンド実行後、ターミナルで下記のログが出力されます。

  1. To have launched start jenkins now and restart at login: brew services start jenkins

このログの出力ではインストールの完了が確認できました。


Jenkinsの起動とログイン

インストール完了時に表示された【brew services start jenkins】のコマンドをターミナル上で実行するとJenkinsが起動可能です。

Jenkinsを停止させる際には【brew services stop jenkins】のコマンドを実行しましょう。

また、Jenkinsの起動が初回になる場合はOSを問わず、端末のブラウザーから「http://localhost:8080」にアクセスする必要があります。

アクセスすると「Unlock Jenkins」と表示され、Administrator password(管理者パスワード)の入力が必要です。

管理者パスワードは、要求画面で表示されている赤字のパスをターミナル上で「cat /Users/ユーザー名/…」のように実行すると確認できます。

管理者パスワードを入力し、ContinueをクリックするとJenkinsのプラグインをインストールできるカスタマイズ画面が表示されます。


 推奨プラグインのインストールとユーザー登録

カスタマイズ画面では「Install suggested plugins」と「Select plugins to install」が選択できます。

Install suggested plugins」ではJenkinsの初回インストール時に推奨されているプラグインをまとめてインストール可能です。

インストール終了後「Create First Admin User」と表示され、下記の情報をユーザー登録で入力する必要があります。


  • ユーザー名
  • パスワード
  • フルネーム
  • メールアドレス

ユーザー情報を入力後Save and Finishをクリックして初期設定は終了です。


Jenkinsによる自動テストの設定まで

Jenkinsで一連の操作を自動化するためにはジョブを設定しておく必要があります。

ジョブの設定はダッシュボード画面の「新規ジョブ設定」から行いますが、新規ジョブ設定では幾つかのジョブ設定が既に用意されています。


ジョブの設定を行う

Enter an item name」にてジョブの名前を決定し、「フリースタイル・プロジェクトのビルド」を選択しましょう。

タブが複数表示され、ビルドのタブを選択すると「ビルド手順の追加」という項目があります。

行いたいテストに沿った項目を選択する必要がありますが、ここではJenkinsの動作を確認するので「シェルの実行」を選択です。

実際にはテストを行うためのコードやシェルスクリプトを欄内に記述し、保存することもあることでしょう。

また、テストの状況に応じてビルド・トリガのタブから「SCMポーリング」を設定することができます。

例えばソースコードの変更時などの特定条件下で、スクリプトを実行させることも可能です。


設定したジョブを実行する

保存したジョブを実行するにはダッシュボード画面に戻る必要があります。

ダッシュボード画面に戻るとジョブ設定を行う際に決定した名前が表示されており、クリックするとプロジェクトを開くことが可能です。

また、メニューバーに「ビルド実行」があり、クリックをすると設定されたジョブが実行されて「ビルド履歴」へ登録されます。

ビルド履歴からジョブを開くと「コンソール出力」があります。

「コンソール出力」実行することで、ビルドされた際に設定したジョブの動き(テスト用のコードやスクリプトの出力)などを確認可能です。


Docker上でJenkinsを構築する準備

ここまでテストを自動化するまでの流れを解説してきましたが、ここからはDocker上でJenkinsを構築するためにDockerについての解説もしていきます。

Dockerについて詳しく知りたいという方は、以下の記事もぜひ併せてご参照ください。

関連記事:Dockerとは?特徴とメリットを徹底解説!Docker Hubとの違いは?コンテナの作り方やダウンロードの方法も紹介


まず、Docker上でJenkinsを構築する為には「Docker Desktop for Mac」のインストールが必要です。

また、本稿ではMac OS版で解説することとします。

DockerのソフトウェアはDocker Hubからダウンロードする事ができますが、初回のダウンロードにはユーザー登録が必要です。

ユーザー登録後にDocker Hubにログインし、下記のプログラムのどちらかをダウンロードします。


  1. Get Docker Desktop for Mac (Stable)
  2. Get Docker Desktop for Mac (Edge)

両者の違いについては下記の通りです。


  •  Stable(定期的に安定したアップデートができる)
  •  Edge(毎月ごとに最新のビルドにアップデートできる)

基本的にはStable版をダウンロードしておきましょう。

Stable版ソフトウェアのインストール後、Docker起動用のファイルは「アプリケーション」フォルダへ移動しておきます。

フォルダの移動を済ませたら、Dockerが問題なく動作するか起動してみましょう。


Dockerのバージョン確認

前項にてインストールしたDockerはStable版(安定版)です。

Stable版は更新が4ヶ月ごとに行われるため、Dockerのバージョン次第では正常な動作を終えることができない可能性も否定できません。

そのため、定期的にDockerのバージョンを確認しておくのが望ましいでしょう。

Dockerのバージョン確認はインストール完了後にターミナルを開き、【docker version】のコマンドを実行することで確認できます。


Jenkinsが動作するためのDockerコンテナを用意する

JenkinsをDocker上で構築するということは、仮想環境であるDockerコンテナ内でJenkinsを動作させるということです。

また、そのためにはDockerコンテナの環境を整える必要があります。

基本的にコンテナに設定した環境は、Dockerfileへ書き出してDockerイメージと呼ばれるフォーマットに環境設定を集約。

これにより、コンテナに設定した環境を呼び出すことができます。

Docker HubやGit hubではJenkinsが動作するための公式イメージが複数公開されており、それらを利用して環境構築を短縮可能です。

代表的な公式イメージ


  • jenkins Docker Official Images
  • jenkinsci/jenkins/

【docker pull jenkins】のコマンドを実行することでもDockerイメージを取得できます。


 Dockerイメージをビルドする

Dockerfileを書き出すか、Dockerイメージを取得したら【docker build】を実行します。


ビルドを基にDockerコンテナを起動する

Dockerイメージを基にビルドした環境でDockerコンテナを起動するので、【docker-compose up】コマンドを実行します。

これでJenkinsが動作するためのDockerコンテナを設定・起動ができました。

Dockerコンテナが起動したら【open http://$(docker-machine ip):8080】を実行してみます。


 Docker上にてJenkinsの起動と利用準備

Jenkinsの登録は既に済ませていますが、Dockerコンテナ上の仮想空間に新しくCIツールのインストールを行う必要があります。

そのため、Jenkinsの初回インストール同様に管理者パスワードの入力から行いましょう。

管理者パスワード入力後、Dockerコンテナへの各種プラグインをインストールし、管理者アカウントを設定します。

ここまででJenkinsの利用準備が整い、Docker上での環境構築ができました。


DockerとJenkinsを併用する意味とは

Dockerなどの仮想環境下でデプロイから実際の継続的な運用を行う上で、CIと併用する開発手法が広まりを見せつつあります。

DockerはJenkinsと並んでオープンソースなので連帯し易いメリットがあります。

Dockerのコンテナという概念では一台のサーバーに複数のアプリケーションを個別に隔離。

こうして疑似的にアプリケーションの並列動作させる事ができるので、開発環境の効率化に名前の挙がるソフトウェアです。

また、Jenkinsと併用すればあらゆるタスクに対して、最適なビルドを自動的に構築できるようなります。

しかし、これは豊富なプラグインの数々が同一サーバー上に混在し、テスト環境がクリーンではないということです。

このような理由からDocker上でJenkinsを構築し、隔離された環境下で、個別に運用することが望まれるケースも増えてきました。


まとめ

アジャイル開発のCIツールとDockerを利用した、個別仮想環境による独立した開発手法は、使用するサーバーマシンの性能にも左右されます。

ですが、企業資産の有効活用と工数の短縮などによるメリットはとても大きいものであるといえるでしょう。

また、Jenkinsの自動テストはイベントのトリガ設定から、テスト用のスクリプトの実行まで自動化できます。

インストールしたプラグインの活用で幅広い応用ができる点も魅力的です。

Docker上でJenkins等CIツールの環境構築は、開発現場でもデファクトスタンダードになりつつあります。

エンジニアとして、常に業界の最新トレンドを意識したり、動向を探ることは何よりも大切なことといえるのではないでしょうか。


toiroフリーランスは、SHIFTグループがプライムとして参画している独自案件をフリーランスエンジニア向けに紹介する唯一のプラットフォームサービスです。

エージェントによるサポートもありますので、ご利用を検討してみてはいかがでしょうか。