Jenkins + Maven の操作

# はじめに
Jenkins + Maven の操作について学んだことを記載する。
リポジトリは以下を利用した。
https://github.com/jenkins-docs/simple-java-maven-app/blob/master/jenkins/Jenkinsfile

# Git からクローン
Jenkins に Git と Maven の Plugin がインストールされていること
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477044/e41710e6-fe8e-bc67-eb0e-196340e47280.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477044/1cfaa33b-5f83-b46d-86fa-71e1b113b725.png)
適当な新しい Job を作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477044/8a65f95d-77b6-1c7e-8a32-6ba0395df114.png)
設定で Git を指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477044/6dfc99d4-25bd-617b-5b2d-ef598585e7c2.png)
Build するとコンテナに clone される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477044/3c0b468c-02ce-d07b-a710-96ef491acf97.png)
確認
```
$ docker exec -it condescending_boyd bash
$ cd /var/jenkins_home/workspace/{Your Job}/
$ ls -al
```

## jar ファイル作成
Global Tool Configuration で Maven の設定
`mvn -B -DskipTests clean package`は[こちら](https://github.com/jenkins-docs/simple-java-maven-app/blob/d429203aa304cba0a1beb7fda8219d916c1e2fce/jenkins/Jenkinsfile#L11)を指定（テストスキップして、jar を作成してくれる）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477044/6935a66f-6d28-ab64-d4f8-11e6794efccc.png)
Job の configuration で `Invoke top-level Maven targets` を指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477044/355634bc-c45e-f8bf-516f-456777a17bcf.png)
Build すると Jar が作成される（最初は、maven のインストールも含まれるため、時間がかかる）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477044/3b796cc2-ce82-0ea3-560e-e5a36bf087b2.png)
確認
```
$ cd /var/jenkins_home/workspace/{Your Job}/target
$ ls -al
// jar ファイルが作成されている
// my-app-1.0-SNAPSHOT.jar
```
## テスト実施
Job の configuration で `Invoke top-level Maven targets` を指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477044/be878802-9ac1-e343-d85e-d22c764ab4a5.png)

Jenkins の Global properties に以下を追加
```
_JAVA_OPTION
-Djdk.net.URLClassPath.disableClassPathURLCheck=true
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477044/ae4e0e9f-ac89-a609-1620-4e48ddeb2bfb.png)
テスト実行されていることを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477044/cbf8e6a8-5768-9a66-476d-9a73a8192351.png)
## Deploy
Build step に以下を追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477044/428ed424-5626-c8a0-fa88-cb5e32961e92.png)
SUCCESS
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477044/b79894e7-63d8-de8a-e010-7f548ea33dd4.png)
確認
```
$ java -jar /var/jenkins_home/workspace/maven-job/target/my-app-1.0-SNAPSHOT.jar
Hello World!
```
## テストレポート
Post-build Actions に Publish JUnit test result report を追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477044/a98c9612-5ec8-ed0e-435f-4ecd807f80ca.png)
結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477044/b6b53589-009f-60df-5379-f151d894868f.png)
## Build が成功した最新の jar をアーカイブする
Post-build Actions に Archive the artifacts を追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477044/bd83f237-458b-df2e-e23e-9a504b9209c0.png)

結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477044/cb5a4f61-c19c-9c3e-a38e-7d4212e441bb.png)