jenkinsでいろいろまとめ

# Jenkinsを用いて継続的インテグレーション

CI界隈では言わずと知れたJenkins。弊社でも新製品のCore部分がJavaなこともあり、テストフェーズで導入を行った。自動化するにあたり、プラグインの設定を行ったので、そのまとめ。
プラグインの導入では結構はまったので、ナレッジとして残す。

## 今回の構築環境

- jenkinsバージョンは`2.46.3`
- WindowsServer2016
- JavaのビルドはMavenを使用
- ソース管理はGitLab
- jenkinsでのプロジェクトはPipeLineを用いる

PipeLineを用いたのは、Gitでのソース管理として、直下にpom.xmlがなく、ディレクトリの変更が必要だったためである。
~~それがなければもっと楽だったのにくそったれ~~


## Jenkinsの導入

Jenkinsは[公式サイト](https://jenkins.io/)からwarファイル落としてきて、TomCatのwebrootに放り込むのが最も簡単。
[warファイルの直リンク](http://mirrors.jenkins.io/war-stable/latest/jenkins.war)

## プラグイン

今回はテストチームの目標として、バグ0とカバレッジ50%以上(現在は20%程度)という目標があるため、カバレッジ測定とソースの品質のためにJaCoCoとCheckStyleとfindbugのプラグインを導入した。

### JoCoCo
コードのカバレッジ測定ツール
プロジェクトの`pom.xml`に以下のソースを追加する。

```xml:pom.xml
<plugins>
  <plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.7.9</version>
  </plugin>
</plugins>
```

### checkstyle
コーディングスタイルのチェックとして入れたが、厳しすぎるのでほとんど活用はされていない。解消しなきゃいけないよねー、ぐらい。
プロジェクトの`pom.xml`に以下のソースを追加する。

```xml: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`に以下のソースを追加する。

```xml: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でのプロジェクト作成になったので、結果設定は以下の様になった。

```groovy
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での確認
ビルドが正常に終了すれば、左側のメニューにそれぞれの集計結果が表示されます。
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/155903/a416d6b4-bc43-b67f-d80d-3c20e01b7f25.png)

# まとめ
Jenkis便利！~~まだあまり活用できてないけど~~

Jenkinsのプラグインで設定すれば自動的に集計されると思ってた。そうじゃなかった。
MavenのPlugin入れると、ビルド中に集計される。それをJenkinsで表示させるのがJenkinsのPluginだった。