具体例から学ぶJenkinsの設定

# はじめに
自分のプロジェクトで回している自動テストに関するジョブについて簡単に説明します。
体系的な話は本を読んでもらうとして、ここでは個別具体的な話だけします。

# jenkinsの設定の見方
##プロジェクト名と説明欄
そのままなので特に言うこともない。
強いていうなら、説明は正しく書きましょう。
※キャプチャの説明文をもうちょっと正確に書くなら「15分毎に開発ブランチをチェックして変更があれば実行する」かな。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214587/3d0b9ced-65a6-3f4e-5b18-ba991261a06a.png)


##古いビルドの破棄
これはビルド実施完了時に、「14日以前」もしくは「15件目を超える」ジョブ履歴を消す設定になっています。
ビルドの実施完了時に削除処理が走るので、月に1度しか動かなさいジョブなら、ジョブを実行するまで前回分（1ヶ月前）のジョブ履歴は残っています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214587/cee16c47-7e67-919d-ef19-5cf228df279d.png)

##ソースコード管理
Gitのリポジトリを指定して持ってきています。
まぁ要はcloneないしはpullするリポジトリ。
ちなみに、Stashってのは、Bitbucket Serverの旧名称です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214587/90b0fc1d-1175-4eda-d685-bc170d4f4948.png)

##ビルドトリガー
これは「Software Configuration Management(ソフトウェア構成管理)」を15分ごとにチェックするという話。
対象は、さっきソースコード管理で指定したリポジトリです。
スケジュール設定の仕方に関しては、「[[Jenkins] ビルドトリガ（定期的に実行）設定についてのまとめ](https://qiita.com/koara-local/items/79cb9c08e77ac9d94b1d)」が分かりやすい。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214587/ed2aa408-1c6c-c9b4-44e9-d4c048d6a708.png)

##ビルド環境
ビルド時の環境設定をします。
ここではログの色付けを指定しているだけです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214587/4e5ac56e-48cd-75da-9e1e-76dcbe3a6a2d.png)

##ビルド
ビルドというフェーズで何をするのかを定義する場所です。
ビルドする際に、もう一個インプットになるリポジトリがあるので、それを持ってきてから、mavenを実行しています。
ゴールってのは、要はmaven実行時のオプションです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214587/34a8b3be-7cad-edc0-6746-f930093006df.png)


補足：
mavenオプションはいくつかありますが、ざっくり以下ぐらいを知っておけば、最低限のことはわかるはず。
各phaseでやることはデフォルトで結構決まってます。独自の設定はpomに規定されるので、それを確認しましょう。
なお、phaseとかgoalって何？って人は、一番下に参考記事（チュートリアルとか）載せておいたので、そちら見て下さい。

|phase/goal|概要|補足|
|:---|:---|:---|
|clean|以前のビルドが作成した全てのファイルを削除する。|高速化のために結構色々キャッシュしているらしいので、挙動が怪しいと感じたらcleanするのが良さそう。|
|verify|品質基準を満たしているかどうかを確認するために任意のチェックを実行する。|ウチのPJではテストと静的解析をしてます。|
|package|jarファイル等のアーカイブにパッケージングする。|jar作るって話。|
|deploy|パッケージをリモートリポジトリへ格納したり、ある環境へデプロイしたりする。|ウチのPJではartifactoryへの更新を行なっている。|

|option|概要|
|:---|:---|
|-U,--update-snapshots|リモートリポジトリで更新されたreleaseとsnapshotのチェックを必須にする。|
|-X,--debug|mavenのデバッグモード|
|-DskipTests=true|テストの実行のみをスキップする|
|-Dmaven.test.skip=true|テストコードのコンパイル、およびテストの実行をスキップする|

**他にも**
こんなことができるヨ。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214587/5cfbe1d4-6231-b7d2-83dc-c0a22ab4df00.png)

##ビルド後の処理
まぁ、まんまですが。。。
Maven verifyでcheckstyleやらfindbugsやらのレポートが生成されるので、そのレポートをjenkinsから見れるようにします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214587/d63dacbf-866b-93bf-0d6e-d83a49fb8340.png)

未解決タスクの集計もおなじですね。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214587/5c7aea61-3102-8c15-81dd-6d12a0a86985.png)

ディスク容量のチェックはプラグインで実現しています。
テスト結果/htmlreportは先程のcheckstyle等と同様でmavenから出力された結果を見えるようにしている感じです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214587/49585c7f-6a9c-5364-ff37-254268fc297c.png)

stepcounterはプラグイン自身に数えてもらってます。
SonarQubeとの連動はここで設定されます。
EmotionalJenkinsはビルド後のおじさんの表情を変えるプラグインです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214587/934603f6-d3ae-35f8-5d79-408ec9b4a787.png)


# jenkins tips
**結局、mavenは何をしているの？**
pom.xmlを見ましょう。

**生成したファイルはどこ？**

```
Jenkinsの管理＞システム情報＞user.homeプロパティ
```

上記プロパティで指定されたディレクトリ配下に「workspace」というディレクトリがあり、その配下にジョブごとにディレクトリがありそこに保存されています。
また、「workspace」と同じ階層に「jobs」というフォルダがありますが、ここにジョブの設定情報と過去のジョブ結果が残っています。


# 参考記事
**mavenに関する記事**

- [Maven3 チュートリアル](http://sambatriste.github.io/maven3-tutorial/)
- [[Maven]mvnコマンドの備忘録](https://atuweb.net/201508_mvn_commands/)
- [Mavenのビルドのライフサイクル](http://blog.pepese.com/entry/20120404/1333513502)
- [こんちはMaven](https://qiita.com/ito_kamu/items/1d282b2efa3b0b614d24)