概要
Jenkins、SonarQube、Nexusを使用してCI環境を構築する手順を記載する。
どのようなCI環境を構築するか
- GitリポジトリにソースコードがPushされると、自動的にJenkinsがJunitテストとCheckstyle、FindBugs、SonarQubeによる静的解析を行う。
- Junitテストと静的解析の結果をJenkinsの画面で確認できる。
- GitリポジトリにライブラリモジュールがPushされると、自動的にNexusのプライベートMavenリポジトリにartifactとして登録される。
前提
- Linux(CentOS7)端末にCI環境を構築する。
- ビルドツールにMavenを使用する。
- バージョン管理システムにGitを使用する。
- Jenkins、SonarQube、NexusをDockerコンテナとして動作させる。
事前に用意しておくもの
- Gitリポジトリ
- Oracleアカウント(JDKのインストールに必要)
注意事項
CI環境を構築する端末に充分な容量のストレージとメモリを搭載すること。
※VMwareやVirtualBoxのデフォルト設定では不足する。
CI環境構築手順
Dockerのインストール
$ yum install -y yum-utils device-mapper-persistent-data lvm2
$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ yum makecache fast
$ yum install docker-ce
$ systemctl start docker
$ systemctl enable docker
【参考情報】Dockerの公式ドキュメント
Jenkinsコンテナの起動
$ docker run -p 8080:8080 -p 50000:50000 jenkins
【参考情報】Jenkinsの公式Dockerリポジトリ
Jenkinsの初期設定
- ブラウザで http://XXX.XXX.XXX.XXX:8080/ にアクセスする。
- 「Administrator password」に管理者用パスワードを入力し、「Continue」を押下する。
- Jenkinsコンテナ起動時、コンソールに表示される「Please use the following password to proceed to installation:」の直後に管理者用パスワードが表示されている。
- 「Install suggested plugins」を押下する。
- 各項目に任意の値を入力し、「Save and Finish」を押下する。
- 「Start using Jenkins」を押下する。
- Jenkinsのトップ画面が表示される。
Jenkinsプラグインのインストール
- サイドメニューの「Jenkinsの管理」を押下する。
- 「プラグインの管理」を押下する。
- 「利用可能」を押下する。
- 以下のプラグインにチェックし、「ダウンロードして再起動後にインストール」を押下する。
- Checkstyle Plug-in
- FindBugs Plug-in
- SonarQube Scanner for Jenkins
- 「インストール完了後、ジョブがなければJenkinsを再起動する」にチェックする。
SonarQubeコンテナの起動
$ docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube
【参考情報】SonarQubeの公式Dockerリポジトリ
Nexusコンテナの起動
$ docker run -d -p 8081:8081 --name nexus sonatype/nexus:oss
【参考情報】Nexusの公式Dockerリポジトリ
JDKのインストール
- サイドメニューの「Jenkinsの管理」を押下する。
- 「Global Tool Configuration」を押下する。
- 「JDK追加」を押下する。
- 「名前」に「JDK」と入力する。
- 「バージョン」にCI対象のアプリケーションが使用しているJDKと同じバージョンを選択する。
- 「Java SE Development Kitの使用許諾に同意する」にチェックする。
- 「ユーザー名とパスワードを入力してください。」を押下する。
- 「ユーザー名」と「パスワード」にOracleアカウントのユーザー名とパスワードを入力し、「OK」を押下する。
- 「閉じる」を押下する。
- 「Save」を押下する。
Mavenのインストール
- サイドメニューの「Jenkinsの管理」を押下する。
- 「Global Tool Configuration」を押下する。
- 「Maven追加」を押下する。
- 「名前」に「Maven」と入力する。
- 「Save」を押下する。
SonarQubeの設定
- サイドメニューの「Jenkinsの管理」を押下する。
- 「システムの設定」を押下する。
- 「Add SonarQube」を押下する。
- 「SonarQube installations」の「Name」に「SonarQube」と入力する。
- 「SonarQube installations」の「Server」に「 http://XXX.XXX.XXX.XXX:9000 」と入力する。
- 「保存」を押下する。
Jenkinsジョブの作成
- サイドメニューの「新規ジョブ作成」を押下する。
- 「Enter an item name」に任意のジョブ名を入力する。
- 「フリースタイル・プロジェクトのビルド」を選択し、「OK」を押下する。
- 「ソースコード管理」に「Git」を選択し、「リポジトリURL」にGitリポジトリのURLを入力する。
- 「認証情報」の「追加」→「Jenkins」を押下する。
- 「ユーザー名」と「パスワード」にGitリポジトリのユーザー名とパスワードを入力し、「追加」を押下する。
- 「認証情報」に手順6で入力したユーザー名を選択する。
- 「ブランチ指定子」にビルド対象のブランチ名を入力する。(例)*/develop
- 「ビルド・トリガ」の「SCMをポーリング」にチェックし、「スケジュール」に「H/15 * * * *」と入力する。
- 「H/15 * * * *」と入力した場合、GitリポジトリにソースコードをPushした15分後にJenkinsジョブが起動する。
- 「ビルド手順の追加」→「Mavenの呼び出し」を押下し、「使用するMaven」に「Maven」を選択する。
- 「ゴール」に
site
と入力する
- Nexusにビルド対象モジュールを登録させたい場合は
site deploy
と入力する。
- 「ビルド後の処理の追加」→「Checkstyle警告の集計」を押下し、「集計するファイル」に「**/target/checkstyle-result.xml」と入力する。
- 「ビルド後の処理の追加」→「FindBugs警告の集計」を押下し、「集計するファイル」に「**/target/findbugs.xml」と入力する。
- 「ビルド後の処理の追加」→「JUnitテスト結果の集計」を押下し、「テスト結果XML」に「**/target/surefire-reports/*.xml」と入力する。
- 「ビルド後の処理の追加」→「SonarQube analysis with Maven」を押下する。
- 「SonarQube analysis with Maven」の「高度な設定」を押下する。
- 「SonarQube analysis with Maven」の「JDK」に「JDK」を選択する。
- 「SonarQube analysis with Maven」の「Maven Version」に「Maven」を選択する。
- 「保存」を押下する。
pom.xmlの編集
<project>要素内に以下の記述を追加する。
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.17</version>
<reportSets>
<reportSet>
<reports><report>checkstyle</report></reports>
</reportSet>
</reportSets>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>3.0.5</version>
<configuration>
<xmlOutput>true</xmlOutput>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>2.20.1</version>
</plugin>
</plugins>
</reporting>
【参考情報】maven-checkstyle-pluginの公式ドキュメント
【参考情報】findbugs-maven-pluginの公式ドキュメント
【参考情報】maven-surefire-report-pluginの公式ドキュメント
Nexusにモジュールを登録させたい場合は<project>要素内に以下の記述も追加する。
<distributionManagement>
<repository>
<id>releases</id>
<url>http://admin:admin123@XXX.XXX.XXX.XXX:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://admin:admin123@XXX.XXX.XXX.XXX:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
動作確認
JenkinsとSonarQubeの動作確認
- GitリポジトリにCI対象ブランチのソースコードをPushする。
- 15分後、Jenkinsトップ画面の「最新の成功ビルド」に「X 時間 Y 分 前 - #Z」と表示されることを確認する。
- 画面右のジョブ実行ボタンを押下する。
- 「ビルド実行状態」を見て、ジョブが終了したことを確認した後、ジョブ名のリンクを押下する。
- 画面に「Checkstyle警告の推移」、「FindBugs警告の推移」、「テスト結果の推移」が表示されることを確認する。
- 「SonarQube」を押下する。
- SonarQubeの画面にソースコードレビュー結果が表示されることを確認する。
Nexusの動作確認
Nexusにモジュールを登録するように設定した場合は以下の動作確認を行う。
- ブラウザで http://XXX.XXX.XXX.XXX:8081/nexus/ にアクセスする。
- 画面左の「Repositories」を押下する。
- モジュールのバージョンに応じて、「Releases」、または「Snapshots」のどちらかを押下する。
- 「Browse Storage」に登録したartifactが表示されることを確認する。