Jenkinsを用いて継続的インテグレーション
CI界隈では言わずと知れたJenkins。弊社でも新製品のCore部分がJavaなこともあり、テストフェーズで導入を行った。自動化するにあたり、プラグインの設定を行ったので、そのまとめ。
プラグインの導入では結構はまったので、ナレッジとして残す。
今回の構築環境
- jenkinsバージョンは
2.46.3
- WindowsServer2016
- JavaのビルドはMavenを使用
- ソース管理はGitLab
- jenkinsでのプロジェクトはPipeLineを用いる
PipeLineを用いたのは、Gitでのソース管理として、直下にpom.xmlがなく、ディレクトリの変更が必要だったためである。
それがなければもっと楽だったのにくそったれ
Jenkinsの導入
Jenkinsは公式サイトからwarファイル落としてきて、TomCatのwebrootに放り込むのが最も簡単。
warファイルの直リンク
プラグイン
今回はテストチームの目標として、バグ0とカバレッジ50%以上(現在は20%程度)という目標があるため、カバレッジ測定とソースの品質のためにJaCoCoとCheckStyleとfindbugのプラグインを導入した。
JoCoCo
コードのカバレッジ測定ツール
プロジェクトのpom.xml
に以下のソースを追加する。
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.9</version>
</plugin>
</plugins>
checkstyle
コーディングスタイルのチェックとして入れたが、厳しすぎるのでほとんど活用はされていない。解消しなきゃいけないよねー、ぐらい。
プロジェクトのpom.xml
に以下のソースを追加する。
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.17</version>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>checkstyle</goal>
</goals>
</execution>
</executions>
<configuration>
<configLocation>sun_checks.xml</configLocation>
<violationSeverity>warning</violationSeverity>
<outputFile>target/site/checkstyle/checkstyle-result.xml</outputFile>
</configuration>
</plugin>
</plugins>
findbugs
バグになりそうな個所を警告として挙げてくれるツール。
警告が上がってもビルドが正常終了するように、
<failOnError>false</failOnError>
としている。
プロジェクトのpom.xml
に以下のソースを追加する。
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
<configuration>
<failOnError>false</failOnError>
<xmlOutput>true</xmlOutput>
<outputEncoding>UTF-8</outputEncoding>
<xmlOutputDirectory>target/site/findbugs</xmlOutputDirectory>
<findbugsXmlOutputDirectory>target/site/findbugs</findbugsXmlOutputDirectory>
</configuration>
</plugin>
</plugins>
stepcounter
こちらはJenkinsのプラグインから追加するだけで使用が可能。
Jenkinsでのパイプライン制御
プラグインの導入
処理中の統計処理の結果をJenkinsで表示するためにJenkinsの設定からそれぞれのプラグインを導入する。
PipeLine
上にも書いた通りPipeLineでのプロジェクト作成になったので、結果設定は以下の様になった。
node {
stage 'checkout'
// PipelineSyntaxからチェックアウト処理を作成して記載
stage 'build_app'
// PipelineSyntaxからMavenビルド処理を作成して記載
stage 'JaCoCo'
jacoco classPattern: '**/target/classes', execPattern: '**/target/**.exec'
stage 'CheckStyle'
checkstyle canComputeNew: false, defaultEncoding: '', healthy: '', pattern: 'target/site/checkstyle/checkstyle-result.xml', unHealthy: ''
stage 'findbugs'
findbugs canComputeNew: false, canRunOnFailed: true, defaultEncoding: '', excludePattern: '', healthy: '', includePattern: '', pattern: 'target/site/findbugs/findbugsXml.xml', unHealthy: ''
stage 'stepCount'
stepcounter settings: [[encoding: 'UTF-8', filePattern: 'src/main/java/**/*.java', filePatternExclude: '', key: 'java']]
}
Jenkisでの確認
ビルドが正常に終了すれば、左側のメニューにそれぞれの集計結果が表示されます。
まとめ
Jenkis便利!まだあまり活用できてないけど
Jenkinsのプラグインで設定すれば自動的に集計されると思ってた。そうじゃなかった。
MavenのPlugin入れると、ビルド中に集計される。それをJenkinsで表示させるのがJenkinsのPluginだった。