Jenkinsの使い方

GitHubとJenkinsを組み合わせて,ユニットテストが成功しているかを常にJenkinsに確認させている。Jenkinsを使い始めてから半年経ったので,そろそろ使い方や導入方法をメモしておく。
 

継続的インテグレーションとは

継続的インテグレーション,CI(continuous integration)とは,主にプログラマーのアプリケーション作成時の品質改善や納期の短縮のための習慣のことである。エクストリーム・プログラミング(XP)のプラクティスの一つで,狭義にはビルドやテスト,インスペクションなどを継続的に実行していくことを意味する。
 

Jenkinsとは

Jenkinsとは,Javaで書かれたオープンソース継続的インテグレーションツールである。Jenkinsには,2つの主要な機能がある。
1つ目は,継続的なソフトウェアのビルドとテストを行うことが出来る機能である。Jenkinsは「継続インテグレーションシステム」を提供し,開発者が変更をプロジェクトに統合でき,ユーザーがより新しいビルドを容易に取得できるようにする。自動化された継続的なビルドは,生産性を大いに向上させる。
2つ目は,外部で起動するジョブの実行を監視することが出来る機能である。cronによるジョブやprocmailのジョブで,リモートマシンで動作するものが含まれる。例えば,cronについて言えば,出力をキャプチャーした定期的なメールを受信し,それを監視するようなことが出来る。
 

Jenkinsの使い方

今回はCentOSにJenkinsをインストールして使用する。JenkinsはJavaで実装されているので,あらかじめJavaをインストールしておく必要がある。
 

Jenkinsをインストールする

インストールする前に,yumリポジトリを追加する必要がある。

wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

 
リポジトリが追加出来たら,yumコマンドでJenkinsのインストールを行う。

yum install jenkins

 
インストールが完了すると,以下の主要なファイルが作成される。

  • /usr/lib/jenkins/jenkins.war : Jenkins本体
  • /etc/sysconfig/jenkins : 設定ファイル
  • /etc/rc.d/init.d/jenkins : 起動スクリプト

 
Jenkinsはデフォルトで8080ポートでアクセスを受け付けるが,Tomcatを8080ポートで動かしているなどでポート番号を変更する必要がある場合は,設定ファイル /etc/sysconfig/jenkins にある変数 JENKINS_PORT の設定を変更する。

JENKINS_PORT="8008"

 

Jenkinsを起動する

Jenkinsを起動するには以下のコマンドを実行する。

service jenkins start

 
Jenkinsを停止するには以下のコマンドを実行する。

service jenkins stop

 
OS起動時にJenkinsを自動起動するようにするには以下のコマンドを実行する。

chkconfig jenkins on

 

Githubと連携してユニットテストを継続的インテグレーションする

ローカルから確認するのであれば,http://localhost:8080 にアクセスすることでJenkinsのトップページを確認出来る。グローバルIPアドレスを割り当てている場合は http://[IPアドレス]:8080 にアクセスすることでトップページを確認出来る。
 
デフォルトの状態では,バージョン管理システムとしてGitとGitHubを対象にすることが出来ないので,プラグインをインストールして追加する必要がある。
 

Gitプラグインをインストールする

[Jenkinsの管理] -> [プラグインの管理] -> [利用可能タブ] -> [GIT Plugin] を選択して,インストールする。
 

GitHubプラグインをインストールする

[Jenkinsの管理] -> [プラグインの管理] -> [利用可能タブ] -> [GitHub Plugin] を選択して,インストールする。
 

Phingプラグインをインストールする

今回はPHPを対象にしてビルドするので,Phingをインストールする。
[Jenkinsの管理] -> [プラグインの管理] -> [利用可能タブ] -> [Phing Plugin] を選択して,インストールする。
 

ジョブを作成する

トップページから [新規ジョブ作成] を選択する。今回はジョブ名を Hello として, フリースタイル・プロジェクトのビルド を選択し,OKボタンを押下する。
 
続いて,ジョブの詳細設定に入る。
 
[GitHub project] にGitHub上のプロジェクトURLを入力する。


https://github.com/whohu/smokydog/

 
[ソースコード管理] にて, [Git] を選択後, [Repository URL] にリポジトリのURLを入力する。

git@github.com:whohu/smokydog.git

 
[Branches to build] に origin/master と入力する。

origin/master

 
[ビルド・トリガ] にて [SCMをポーリング] にチェックを付ける。 [SCMをポーリング] ではGitリポジトリに変化があった場合に自動的にビルドを行ってくれる。 [スケジュール] を以下のように入力する。

H/3 * * * *

 
上記では,3分毎にSCM(software configuration management,バージョン管理システム)からブランチを取得するように設定している。
 
[ビルド] ではPhingの呼び出しを選択する。 [ターゲット] には unit_test と記述する。
 

build.xmlを記述する

これでGitからブランチを取得する設定は出来たので,続いて,自動でテストを実行する設定を記述する。今回はビルドツールとしてPhingを使っているので, build.xml というファイルを作成し,その中に設定を記述する。
 

<?xml version="1.0" encoding="utf-8" ?>
<project name="Hello" basedir="/var/lib/jenkins/workspace/Hello" default="unit_test">
  <target name="unit_test">
    <exec command="cakerunner --cakephp-app-path app -R app/tests/cases" />
  </target>
</project>

 
1行目では,バージョンとエンコーディングの宣言を行っている。
2行目では, project name がプロジェクト名, basedir が実行のベースとするディレクトリ, default がデフォルトで実行するターゲット名である。
3行目では, target name にてターゲット名を設定している。
4行目では,テストを実行する際のコマンドを設定している。
 
ちなみに4行目ではPHPのSimpleTestを使って,テストを実行することを想定して記述している。
 

まとめ

Jenkinsでは,非常に簡単な設定でユニットテストを継続的インテグレーションすることが出来る。今回紹介した範疇からは外れるが,追加でプラグインを入れることで,ビルド時にシェルスクリプトを実行したり,ビルド失敗時にメールを送ったりすることも出来たりと,更に応用的な使い方も出来る。
 
 
以上
 
 
参考
継続的インテグレーション – Wikipedia
Jenkins – Wikipedia
Meet Jenkins – 日本語 – Jenkins Wiki
CentOS/RedHatにJenkinsをインストールする手順 (yum, RPM) | OSCALOG
Jenkinsを使ってみよう(Mac OS X&Linux)[Ruby、Rails] – Build Insider
Jenkins で PHP_CodeSniffer と PHPUnit を動かすまで vol.1 – Qiita
build.xmlの作成と説明 | Jenkins で PHP_CodeSniffer と PHPUnit を動かすまで vol.2 – Qiita

Article written by

One Response

  1. CentOS@jenkinsを導入するよ! | NobMemo

    […] Jenkinsの使い方 ‹ 技術の犬小屋 […]

コメントを残す