Jenkinsの使い方+MavenやSonarとの連携

Jenkinsの導入〜MavenSonarとの連携方法までを紹介します。SubversionやGitとの連携は次回以降に紹介したいと思います。

まずはJenkinsの準備。
http://jenkins-ci.org/ からWARファイルをダウンロードし、javaコマンドでサーバを起動します。

C:\root\usr\local>java -jar jenkins.war
Running from: C:\root\usr\local\jenkins.war
webroot: $user.home/.jenkins
1 03, 2013 11:01:01 午後 winstone.Logger logInternal
情報: Beginning extraction from war file
Jenkins home directory: C:\Users\XXXXXXXXX\.jenkins found at: $user.home/.jenkins
1 03, 2013 11:01:12 午後 winstone.Logger logInternal
情報: HTTP Listener started: port=8080
1 03, 2013 11:01:12 午後 winstone.Logger logInternal
情報: AJP13 Listener started: port=8009
1 03, 2013 11:01:12 午後 winstone.Logger logInternal
情報: Winstone Servlet Engine v0.9.10 running: controlPort=disabled
1 03, 2013 11:01:13 午後 jenkins.InitReactorRunner$1 onAttained
情報: Started initialization
1 03, 2013 11:01:19 午後 jenkins.InitReactorRunner$1 onAttained
情報: Listed all plugins
1 03, 2013 11:01:19 午後 jenkins.InitReactorRunner$1 onAttained
情報: Prepared all plugins
1 03, 2013 11:01:19 午後 jenkins.InitReactorRunner$1 onAttained
情報: Started all plugins
1 03, 2013 11:01:19 午後 jenkins.InitReactorRunner$1 onAttained
情報: Augmented all extensions
1 03, 2013 11:01:19 午後 jenkins.InitReactorRunner$1 onAttained
情報: Loaded all jobs
1 03, 2013 11:01:22 午後 org.apache.sshd.common.util.SecurityUtils$BouncyCastleRegistration run
情報: Trying to register BouncyCastle as a JCE provider
1 03, 2013 11:01:23 午後 org.apache.sshd.common.util.SecurityUtils$BouncyCastleRegistration run
情報: Registration succeeded
1 03, 2013 11:01:23 午後 org.jenkinsci.main.modules.sshd.SSHD start
情報: Started SSHD at port 49464
1 03, 2013 11:01:23 午後 jenkins.InitReactorRunner$1 onAttained
情報: Completed initialization
1 03, 2013 11:01:23 午後 hudson.TcpSlaveAgentListener <init>
情報: JNLP slave agent listener started on TCP port 49465
1 03, 2013 11:01:24 午後 hudson.WebAppMain$2 run
情報: Jenkins is fully up and running

ブラウザから http://localhost:8080/ にアクセスすると下記のような画面が表示されます。

次はMavenでのビルドですが、Sonarとの連携も考慮し、まずはSonarを起動しておきます(Sonarについての詳細は http://d.hatena.ne.jp/mokimokisan/20130101/1357055791 を参照)。

c:\root\usr\local\sonar-3.4\bin\windows-x86-64>StartSonar.bat
wrapper  | --> Wrapper Started as Console
wrapper  | Launching a JVM...
jvm 1    | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1    |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
jvm 1    |
jvm 1    | 2013-01-03 23:17:08.340:INFO::Logging to org.sonar.application.FilteredLogger@339cefd6 via org.sonar.application.FilteredLogger
jvm 1    | 2013-01-03 23:17:08.411:INFO::jetty-6.1.25
jvm 1    | 2013-01-03 23:17:09.445:INFO::NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet
jvm 1    | JRuby limited openssl loaded. http://jruby.org/openssl
jvm 1    | gem install jruby-openssl for full support.
jvm 1    | 2013-01-03 23:17:57.365:INFO::Started SelectChannelConnector@0.0.0.0:9000

下準備ができたので、JenkinsにMavenでのビルドジョブを登録します。
まずは、新規ジョブ作成から [Maven2/3プロジェクトのビルド] を選択します。

※ビルドするプロジェクトは http://d.hatena.ne.jp/mokimokisan/20130101/1357055791 で使ったプロジェクトと同じものです。
ファイルは
20121228_SpringTest.zip 直
からダウンロードできます。

次画面で「Maven2/3のインストール先を設定する必要があります。」と表示されるので [システムの設定] をクリックします。

JDKMavenのインストーディレクトリを指定し、画面左下の [保存] をクリックします。

ビルドの設定では、試しに前処理として clean install -DskipTests=true
ビルドとして sonar:sonar を指定し、画面左下の [保存] をクリックします。
※ビルドの箇所に clean install -DskipTests=true sonar:sonar と記述すると sonar:sonar でもテストが省略されてしまいます。

ここまでで設定完了したのでビルドを実行します。

ビルドが成功すると下図のようになります。失敗した場合はコンソール出力のログから原因を探って下さい。

Sonar http://localhost:9000/ にアクセスしてTime Machineをみると、Jenkinsから実行されたテストのメトリクスが収集されてSonarに登録されていることが分かります。