「Ant,Jenkins,Sonarの導入手順」の版間の差分

提供: Software Development Memo
移動先: 案内検索
(Sonarの品質管理画面を更新)
(更新履歴)
138行目: 138行目:
  
 
[[ファイル:Install sonar ant 06.png|600px]]
 
[[ファイル:Install sonar ant 06.png|600px]]
 +
 +
== トラブルシューティング ==
 +
 +
=== Sonar実行時に「org.sonar.squid.api.AnalysisException: Got an exception - unexpected char: 0xXXXX」が表示される ===
 +
 +
ソースコードのエンコーディングが「MS932」の場合、以下のエラーメッセージが表示されることがあります。
 +
 +
<source lang="text">
 +
sonar:
 +
[sonar:sonar] Apache Ant(TM) version 1.8.2 compiled on December 20 2010
 +
[sonar:sonar] Sonar Ant Task version: 1.0
 +
[sonar:sonar] Loaded from: file:/usr/local/apache-ant-1.8.2/lib/sonar-ant-task-1.0.jar
 +
[sonar:sonar] Sonar work directory: /tmp/sonar/test00
 +
[sonar:sonar] Sonar server: http://127.0.0.1:8080/sonar
 +
[sonar:sonar] Sonar version: 2.7
 +
[sonar:sonar] [INFO]  Database dialect class org.sonar.jpa.dialect.MySql
 +
[sonar:sonar] [INFO]  Execution environment: Ant Apache Ant(TM) version 1.8.2 compiled on December 20 2010
 +
[sonar:sonar] [INFO]  -------------  Analyzing Sonarサンプル
 +
[sonar:sonar] [INFO]  Selected quality profile : [name=Sonar way,language=java]
 +
[sonar:sonar] [INFO]  Compare to previous analysis  (2011-04-16)
 +
[sonar:sonar] [INFO]  Compare over 5 days (2011-04-11, analysis of 2011-04-16 21:02:18.0)
 +
[sonar:sonar] [INFO]  Compare over 30 days (2011-03-17, analysis of 2011-04-16 21:02:18.0)
 +
[sonar:sonar] [INFO]  Configure maven plugins...
 +
[sonar:sonar] [INFO]  Sensor AsynchronousMeasuresSensor...
 +
[sonar:sonar] [INFO]  Sensor AsynchronousMeasuresSensor done: 90 ms
 +
[sonar:sonar] [INFO]  Sensor SquidSensor...
 +
[sonar:sonar] [INFO]  Java AST scan...
 +
 +
BUILD FAILED
 +
/usr/local/jenkins/jobs/sonar-ant-sample/workspace/sonar-ant-sample/build.xml:22: org.sonar.squid.api.AnalysisException: Got an exception - unexpected char: 0xFFFD, file : /usr/local/jenkins/jobs/sonar-ant-sample/workspace/sonar-ant-sample/src/test/Class00.java, line : 6
 +
at org.sonar.java.ast.CheckstyleAuditListener.addError(CheckstyleAuditListener.java:40)
 +
at com.puppycrawl.tools.checkstyle.Checker.fireErrors(Checker.java:513)
 +
at com.puppycrawl.tools.checkstyle.Checker.process(Checker.java:279)
 +
at org.sonar.java.ast.JavaAstScanner.launchCheckstyleEngine(JavaAstScanner.java:75)
 +
at org.sonar.java.ast.JavaAstScanner.scanFiles(JavaAstScanner.java:138)
 +
at org.sonar.plugins.squid.SquidExecutor.scanSources(SquidExecutor.java:166)
 +
at org.sonar.plugins.squid.SquidExecutor.scan(SquidExecutor.java:87)
 +
at org.sonar.plugins.squid.SquidSensor.analyzeMainSources(SquidSensor.java:78)
 +
at org.sonar.plugins.squid.SquidSensor.analyse(SquidSensor.java:62)
 +
at org.sonar.batch.phases.SensorsExecutor.execute(SensorsExecutor.java:59)
 +
at org.sonar.batch.phases.Phases.execute(Phases.java:75)
 +
at org.sonar.batch.ProjectBatch.execute(ProjectBatch.java:55)
 +
at org.sonar.batch.Batch.analyzeModule(Batch.java:158)
 +
at org.sonar.batch.Batch.analyzeModules(Batch.java:76)
 +
at org.sonar.batch.Batch.execute(Batch.java:62)
 +
at org.sonar.ant.Launcher.executeBatch(Launcher.java:121)
 +
at org.sonar.ant.Launcher.execute(Launcher.java:60)
 +
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 +
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 +
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 +
at java.lang.reflect.Method.invoke(Method.java:597)
 +
at org.sonar.ant.SonarTask.delegateExecution(SonarTask.java:167)
 +
at org.sonar.ant.SonarTask.execute(SonarTask.java:151)
 +
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
 +
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 +
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 +
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 +
at java.lang.reflect.Method.invoke(Method.java:597)
 +
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
 +
at org.apache.tools.ant.Task.perform(Task.java:348)
 +
at org.apache.tools.ant.Target.execute(Target.java:390)
 +
at org.apache.tools.ant.Target.performTasks(Target.java:411)
 +
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
 +
at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
 +
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
 +
at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
 +
at org.apache.tools.ant.Main.runBuild(Main.java:809)
 +
at org.apache.tools.ant.Main.startAnt(Main.java:217)
 +
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
 +
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
 +
 +
Total time: 6 seconds
 +
Finished: FAILURE
 +
</source>
 +
 +
原因は、CheckStyleが文字コードを正しく認識していないためであると想定します。CheckStyleに文字コードを認識させるためには、「build.xml」で「sonar.sourceEncoding」を指定する必要があります。
 +
 +
参考 : [http://docs.codehaus.org/display/SONAR/Advanced+parameters Advanced parameters - Sonar]
  
 
== 更新履歴 ==
 
== 更新履歴 ==
 
* ページ作成 -- 2011年4月16日 (土) 18:54 (JST)
 
* ページ作成 -- 2011年4月16日 (土) 18:54 (JST)

2011年4月16日 (土) 12:12時点における版


注意 : このページ「Ant,Jenkins,Sonarの導入手順」は、現在書きかけの状態です。完成版に向けて、今後加筆・修正します。また、本ページの内容は全体的な整合性が取れていない可能性があります。

本ページでは、Javaソフトウェア管理ツール群である、Ant・Jenkins・Sonarの導入手順を記述します。Maven,Jenkins,Sonarの導入手順と異なるのは、ビルドツールにMavenではなくAntを使用している点です。

Mavenは、ディレクトリ構成といった各種ルールが予め定義されているため、標準に従えばビルド作業が効率よく行える反面、自由度が低いため融通が利かないという性質があります。

Mavenを導入していないプロジェクトに対してSonarによる品質チェックを行いたい場合、Mavenのルールに無理やり適合させて既存の構成を変更してしまうことは得策とは言えません。Sonar 2.6からAntによるビルドでもSonarを使用でるようになりましたので、その手順を記述します。

環境

  • OS : CentOS 5.5
  • Ant : 1.8.2
  • Jenkins : 1.406
  • Sonar : 2.7
  • Tomcat : 7.0.12
  • MySQL : 5.1.54

インストール

Jenkins, Tomcat, MySQLのインストール方法は、Maven,Jenkins,Sonarの導入手順#インストールを参照ください。

Ant

入手先 : http://ant.apache.org/

$ tar zxvf apache-ant-1.8.2-bin.tar.gz
# mv apache-ant-1.8.2 /usr/local/

Sonar

入手先 : http://www.sonarsource.com/

$ unzip sonar-2.7.zip
# mv sonar-2.7 /usr/local/

Sonar Ant Task

入手先 : http://docs.codehaus.org/display/SONAR/Analyse+with+ANT

上記ページからSonar Ant Taskをダウンロードします。

ダウンロードした「sonar-ant-task-1.0.jar」ファイルを「/usr/local/apache-ant-1.8.2/lib/」に移動します。

設定

Jenkins, Sonar, Tomcat, MySQLのインストール方法は、Maven,Jenkins,Sonarの導入手順#設定を参照ください。

その他

「ANT_HOME」の環境変数を設定します。

export ANT_HOME=/usr/local/apache-ant-1.8.2/

JenkinsがAntのコマンドである「ant」を実行するために、「/usr/local/apache-ant-1.8.2/bin/」をPATHに加えます。

起動

起動方法はMaven,Jenkins,Sonarの導入手順#起動を参照ください。

Sonarの品質管理画面を更新

EclipseでJavaプロジェクトを作成し、Sonarの品質管理画面を更新する場合の手順を記述します。Subversionの使用方法はMaven,Jenkins,Sonarの導入手順#Subversionリポジトリを作成するを参考にしてください。

Javaプロジェクトの作成

Javaプロジェクトのルートディレクトリに「build.xml」ファイルを作成します。ファイルの作成例を以下に示します。

<?xml version="1.0" encoding="UTF-8"?>
<project name="sample" default="compile" basedir="." xmlns:sonar="antlib:org.sonar.ant">
	<description>Sonarサンプル</description>
	<property environment="env" />
	<property name="src" location="src"/>
	<property name="build" location="bin"/>

	<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
		<classpath path="${env.ANT_HOME}/lib/sonar-ant-task-1.0.jar" />
	</taskdef>

	<target name="init">
		<tstamp/>
		<mkdir dir="${build}"/>
	</target>

	<target name="compile" depends="init" description="compile the source">
		<javac srcdir="${src}" destdir="${build}" encoding="MS932" />
	</target>

	<target name="sonar" description="analyze project" >
		<sonar:sonar workDir="/tmp/sonar/test00" key="com.example.test00:test00" version="0.1">
			<property key="sonar.jdbc.url" value="jdbc:mysql://${env.SONAR_HOST_NAME}:3306/sonar?useUnicode=true&amp;characterEncoding=utf8" />
			<property key="sonar.jdbc.driverClassName" value="com.mysql.jdbc.Driver" />
			<property key="sonar.jdbc.username" value="sonar" />
			<property key="sonar.jdbc.password" value="sonar" />
			<property key="sonar.host.url" value="http://${env.SONAR_HOST_NAME}:8080/sonar" />
			<property key="sonar.sourceEncoding" value="MS932" />

			<sources>
				<path location="${src}" />
			</sources>

			<property key="sonar.projectName" value="Sonarサンプル" />
			<property key="sonar.dynamicAnalysis" value="false" />
		</sonar:sonar>
	</target>

	<target name="clean" description="clean up" >
		<delete dir="${build}"/>
	</target>
</project>

今回使用したプロジェクトのエンコードは「UTF-8」でなく「MS932」のため、javacのencoding属性、sonar:sonarのproperty要素に「MS932」の記述を追記しています。

Jenkinsでジョブを設定する

最初に、「Jenkinsの管理」->「システムの設定」からAntの設定を行います。

Install sonar ant 01.png

次に、「新規ジョブ作成」からジョブを作成します。

Install sonar ant 02.png

「ソースコード管理システム」と「ビルド」の項目を変更します。

Install sonar ant 03.png

「ビルド実行」を選択すると、ビルドが開始されます。コンソール出力の最後に「Finished: SUCCESS」と表示されていれば、正常に終了しています。

Install sonar ant 04.png

「http://<ホスト名>:8080/sonar」にアクセスすると、「Sonarサンプル」が追加されています。

Install sonar ant 05.png

Install sonar ant 06.png

トラブルシューティング

Sonar実行時に「org.sonar.squid.api.AnalysisException: Got an exception - unexpected char: 0xXXXX」が表示される

ソースコードのエンコーディングが「MS932」の場合、以下のエラーメッセージが表示されることがあります。

sonar:
[sonar:sonar] Apache Ant(TM) version 1.8.2 compiled on December 20 2010
[sonar:sonar] Sonar Ant Task version: 1.0
[sonar:sonar] Loaded from: file:/usr/local/apache-ant-1.8.2/lib/sonar-ant-task-1.0.jar
[sonar:sonar] Sonar work directory: /tmp/sonar/test00
[sonar:sonar] Sonar server: http://127.0.0.1:8080/sonar
[sonar:sonar] Sonar version: 2.7
[sonar:sonar] [INFO]  Database dialect class org.sonar.jpa.dialect.MySql
[sonar:sonar] [INFO]  Execution environment: Ant Apache Ant(TM) version 1.8.2 compiled on December 20 2010
[sonar:sonar] [INFO]  -------------  Analyzing Sonarサンプル
[sonar:sonar] [INFO]  Selected quality profile : [name=Sonar way,language=java]
[sonar:sonar] [INFO]  Compare to previous analysis  (2011-04-16)
[sonar:sonar] [INFO]  Compare over 5 days (2011-04-11, analysis of 2011-04-16 21:02:18.0)
[sonar:sonar] [INFO]  Compare over 30 days (2011-03-17, analysis of 2011-04-16 21:02:18.0)
[sonar:sonar] [INFO]  Configure maven plugins...
[sonar:sonar] [INFO]  Sensor AsynchronousMeasuresSensor...
[sonar:sonar] [INFO]  Sensor AsynchronousMeasuresSensor done: 90 ms
[sonar:sonar] [INFO]  Sensor SquidSensor...
[sonar:sonar] [INFO]  Java AST scan...

BUILD FAILED
/usr/local/jenkins/jobs/sonar-ant-sample/workspace/sonar-ant-sample/build.xml:22: org.sonar.squid.api.AnalysisException: Got an exception - unexpected char: 0xFFFD, file : /usr/local/jenkins/jobs/sonar-ant-sample/workspace/sonar-ant-sample/src/test/Class00.java, line : 6
	at org.sonar.java.ast.CheckstyleAuditListener.addError(CheckstyleAuditListener.java:40)
	at com.puppycrawl.tools.checkstyle.Checker.fireErrors(Checker.java:513)
	at com.puppycrawl.tools.checkstyle.Checker.process(Checker.java:279)
	at org.sonar.java.ast.JavaAstScanner.launchCheckstyleEngine(JavaAstScanner.java:75)
	at org.sonar.java.ast.JavaAstScanner.scanFiles(JavaAstScanner.java:138)
	at org.sonar.plugins.squid.SquidExecutor.scanSources(SquidExecutor.java:166)
	at org.sonar.plugins.squid.SquidExecutor.scan(SquidExecutor.java:87)
	at org.sonar.plugins.squid.SquidSensor.analyzeMainSources(SquidSensor.java:78)
	at org.sonar.plugins.squid.SquidSensor.analyse(SquidSensor.java:62)
	at org.sonar.batch.phases.SensorsExecutor.execute(SensorsExecutor.java:59)
	at org.sonar.batch.phases.Phases.execute(Phases.java:75)
	at org.sonar.batch.ProjectBatch.execute(ProjectBatch.java:55)
	at org.sonar.batch.Batch.analyzeModule(Batch.java:158)
	at org.sonar.batch.Batch.analyzeModules(Batch.java:76)
	at org.sonar.batch.Batch.execute(Batch.java:62)
	at org.sonar.ant.Launcher.executeBatch(Launcher.java:121)
	at org.sonar.ant.Launcher.execute(Launcher.java:60)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.sonar.ant.SonarTask.delegateExecution(SonarTask.java:167)
	at org.sonar.ant.SonarTask.execute(SonarTask.java:151)
	at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
	at org.apache.tools.ant.Task.perform(Task.java:348)
	at org.apache.tools.ant.Target.execute(Target.java:390)
	at org.apache.tools.ant.Target.performTasks(Target.java:411)
	at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
	at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
	at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
	at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
	at org.apache.tools.ant.Main.runBuild(Main.java:809)
	at org.apache.tools.ant.Main.startAnt(Main.java:217)
	at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
	at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)

Total time: 6 seconds
Finished: FAILURE

原因は、CheckStyleが文字コードを正しく認識していないためであると想定します。CheckStyleに文字コードを認識させるためには、「build.xml」で「sonar.sourceEncoding」を指定する必要があります。

参考 : Advanced parameters - Sonar

更新履歴

  • ページ作成 -- 2011年4月16日 (土) 18:54 (JST)