こんにちは、松田です。

今回はJenkinsを使ってみました。その機能や使い方をご紹介します。

 

Jenkinsとは

ソフトウェア開発をサポートする継続的インテグレーション*ツールで、Javaで書かれたWebアプリケーションです。
* 継続的インテグレーション:ソフトウェア開発において、ビルドやテストを頻繁に繰り返し行なうことにより問題を早期に発見し、開発の効率化・省力化や納期の短縮を図る手法。特に、専用のツールを用いてこのプロセスを自動化あるいは半自動化し、効率的に実施する方式。[IT用語辞典 e-Wordsから引用]

 

Jenkinsでできること

Jenkinsはソフトウェア開発時に行う様々な作業を自動化できます。

icon-caret-right ビルドの自動化

Jenkinsの最もポピュラーな使い方はビルドの自動化です。
バージョン管理システム(SVNやGit)と連携し、ソースがコミットされたタイミングでビルドが実行されます。

icon-caret-right デプロイの自動化

Jenkinsはビルドしたプログラムを開発サーバや本番サーバにデプロイすることができます。

icon-caret-right テストの自動化

JenkinsはJUnit等のテストフレームワークを使ったテストができます。

icon-caret-right 静的コード解析の自動化

JenkinsはCheckstyle、FindBugs、Step Counter等の静的コード解析ができます。

 

実際にやってみよう

まずはJenkinsのインストールです。JenkinsはWindowsでもLinuxでも動作します。この記事ではCentOS 6.7を例に記述します。

JenkinsはJavaが必要なため、Javaをインストールします。

yum install java-1.7.0-openjdk

Jenkinsをインストール・起動します。

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 install jenkins
service jenkins start

起動するとデフォルトでは8080番ポートで立ち上がります。http://サーバのIP:8080/ でアクセスすると以下のようにJenkinsのホーム画面が見えるはずです。

 

 icon-check Subversionの用意

Jenkinsはバージョン管理システムと連携しソースのコミットをトリガーとしてビルド等の処理を実行します。

今回はSubversionと連携します。Subversionには以下をコミットしておきます。

 

【Tax.java】
package sample;

public class Tax {
	public String test;

	public static void main(String[] args) {
		int price = Integer.parseInt(args[0]);
		int consumptionTax = calcConsumptionTax(price);
		System.out.println(consumptionTax);
	}

	public static int calcConsumptionTax(int price) {
		return (int) (price * 0.08);
	}
}
【TaxTest.java】
package sample;
import static org.junit.Assert.*;
import org.junit.Test;

public class TaxTest {
	@Test
	public void test() {
		assertEquals(Tax.calcConsumptionTax(100), 8);
		assertEquals(Tax.calcConsumptionTax(500), 40);
		assertEquals(Tax.calcConsumptionTax(1000), 80);
	}
}

 

Jenkinsでテスト結果等のグラフを表示するにはAntやMaven等のビルドツールから出力されるレポートが必要になるため、build.xmlにJUnit/Checkstyle/FindBugsの処理を記述しておきます。

【build.xml】
	
	
		
	

	
	
		
		
		
	

	
	
		
		
			
			
		
	

	
	
		
		
		
			
			
			
			
			
				
			
		
	

	
	
	
		
			
			
		
	

	
	
	
		
			
			
		
	

	

 

Antのインストール

前述の通りAntが必要ですのでインストールします。

yum install ant
yum install ant-junit

 

 icon-check ジョブの作成

Jenkinsはジョブという単位で処理が実行されます。それではJenkinsの画面からビルド・テスト・静的コード解析を実行するジョブを作成してみます。

1. 基本設定
  1. 新規ジョブ作成をクリック
  2. 任意のジョブ名を入力
  3. フリースタイル・プロジェクトのビルドにチェック
  4. OKをクリック

 

2. ソースコード管理の設定

連携するSubversionの情報を入力します。ローカルモジュールディレクトリはリポジトリからチェックアウトしたファイルが保存されるディレクトリへの相対パスになります。この例では /var/lib/jenkins/jobs/ビルドジョブ/svn に保存されます。

  1. ソースコード管理でSubversionを選択
  2. リポジトリURLを入力
  3. ローカルモジュールディレクトリに./svnを入力

 

3. ビルドトリガの設定

ジョブの実行タイミングを設定します。

今回はSubversionへコミットされたタイミングで処理を実行したいので、JenkinsからSubversionへ定期的なポーリングを行ってコミットを検知するよう設定します。
ポーリング間隔はcronと似た書式で設定します。(画像の例は毎分)

  1. SCMでポーリングにチェック
  2. リスケジュールにポーリング間隔を入力

 

4. ビルドの設定

ビルド処理にはAnt、Maven、シェルスクリプトが指定できます。今回はAntを選択しbuild.xmlでJavaコードのコンパイル・JUnit・CheckStyle・Findbugsを実行するtargetのallを設定します。

  1. ビルド手順の追加でAntを追加しallを入力

 

5. ビルド後の処理の設定

JenkinsはAntによって出力されたJUnitやCheckStyleのレポート(xml)をビルド後に集計してグラフを生成してくれます。

  1. ビルド後の処理の追加でJUnitテスト結果の集計を追加しレポートのパスを入力
  2.  

  3. Checkstyle警告の集計を追加しレポートのパスを入力
  4.  

  5. FindBugs警告の集計を追加しレポートのパスを入力
  6.  

  7. Step Counterを追加しソースのパスを入力

 

 icon-check 設定完了

以上で設定は完了です。

Subversionにコミットするとジョブが起動され、Jenkinsサーバにソースがチェックアウトされ、ビルド・JUnitテスト・静的コード解析が実行されます。

 

 icon-check 確認

Subversionにコミットすると以下のようにclassファイルができていることが確認できました。

 

Jenkinsの画面ではJUnitテスト結果や静的コード解析の結果がグラフで表示されます。

(今回はあまり変化のないグラフになってしまっています。)

グラフをクリックすると結果の詳細も確認できます。

【JUnitテスト結果】

【Checkstyle結果】

 

【FindBugs結果】

【Step Counter結果】

 

まとめ

Jenkinsを使うことでソースをコミットするだけでビルド/テスト/静的コード解析が自動で実行され、結果もグラフで確認できました。

ここまで自動化できるとソースをコミットするのが楽しくなりそうです。今回はご紹介しなかったですが、この他にもSeleniumによるUIテスト自動化、JaCoCoによるテストカバレッジレポート取得の自動化、バグトラッキングシステムとの連携など、様々な自動化ができるようです。

 

開発現場でビルドやテストの作業を手動で行っていて手間だと感じている方は、Jenkinsを導入してみてはいかがでしょうか。

TOP
TOP