Groovy Postbuild PluginでJenkinsのビルド履歴をちょっと良くする

歴史も長いので、おそらく利用している方も多いJenkinsのプラグインである「[Groovy Postbuild Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Postbuild+Plugin)」

このプラグインは「ビルド後の処理」として利用することが出来るわけですが、これを利用することにより色々と捗ります。

その中でも、今回はビルド履歴を見やすくするということについて書こうかと思います。


## デフォルトの状態
殺風景なビルド履歴が広がっています。
![スクリーンショット 2016-12-29 16.12.41.png](https://qiita-image-store.s3.amazonaws.com/0/37642/4a93b602-c999-fff4-1ce5-54151704fc97.png)

上記の場合だと、何をどのようにビルドしたのかはビルド履歴の先を見ないとわかりません。
簡易的な情報レベルだけでも表示されていると色々と捗ります。

slackには通知させているかとは思いますが、slackのように流れていってしまうところだけに頼るのは心もとないです。

### 蛇足
右側にアイコンが出ている箇所がありますが、これは設定が変更されたことを教えてくれる[JobConfigHistory Plugin](https://wiki.jenkins-ci.org/display/JENKINS/JobConfigHistory+Plugin)が出しているものです。


## 今回おこなったこと(の一例)
そこで、Groovy Postbuild Pluginを使って以下の様なことをおこなうことにしました。

 - ビルド履歴を見たときに、ある程度の情報が載っている
 - 特別なビルド結果であれば、それがわかるようになっている
 - 取っておくべきビルド結果であれば、ビルドを保存しておく

### 事前に行っておくべきこと
Jenkinsを利用しているという前提のもと

 - Groovy Postbuildをインストール
 - 「ビルド後の処理」に「Groovy Postbuild」を追加


### 例1 descriptionに利用したビルドパラメータを表示する

![スクリーンショット 2016-12-29 17.09.57.png](https://qiita-image-store.s3.amazonaws.com/0/37642/c168ba49-1a1d-32b4-6323-2587b3ec119d.png)

ビルド時に利用するビルドパラメータを表示しています。
「env」がビルドパラメータとして存在する前提の場合は以下のように「Groovy Script」の箇所に書けばOKです。
仮にビルドパラメータがもっとある場合は、paramsの箇所に追加すればOKです。

```groovy
def params = [
  "env"
]
def description = StringBuilder.newInstance()
for (param in params) {
  description.append(param)
  description.append(": ")
  description.append(manager.build.buildVariables.get(param)+"\n")
}
manager.build.setDescription(description.toString())

```

ビルドパラメータの取得の仕方は上記以外にもあって、以下のような書き方でも取得できます。

```groovy
def vars = manager.build.getEnvironment(manager.listener)
```

ちなみに、並列化を考えるとenv単位(向き先など)であれば別々にjobを作ったほうが良いケースも多いです。


### 例2 titleにbranch名(など)を表示する
![スクリーンショット 2016-12-29 17.18.11.png](https://qiita-image-store.s3.amazonaws.com/0/37642/ad972aea-0e53-ba18-9987-61c22d11fc5d.png)

上記はbranch名をtitleに表示するようにしています。
ビルドパラメータにbranchが存在する前提ですと以下の1行で書くことが可能です。

```groovy
manager.build.setDisplayName("#" + manager.build.number + " " + envVars["branch"])
```

これにより、どのbranchで作ったかがすぐにわかります。
これをdescriptionに書く手も当然ありますが、以下の理由からtitleにつけるケースもあります。


#### 他プロジェクトから成果物をコピーへの利用
ビルドパラメータにある「ビルド」を使うと他のプロジェクトのbuildNumber付きのURLがパラメータとして取得することができます。

![スクリーンショット 2016-12-29 17.23.58.png](https://qiita-image-store.s3.amazonaws.com/0/37642/0d86b331-36bf-121d-c15a-8463db63c2a3.png)

ここにはtitleしか表示されないので、ここにbranch名などを表示させるようにしておくと選択するときのミスが減ります。
この値は「ビルド」にある「他プロジェクトから成果物をコピー」で「特定のビルド」で利用しています。


### 例3 バージョン情報があればShortTextに表示する
![スクリーンショット 2016-12-29 18.13.51.png](https://qiita-image-store.s3.amazonaws.com/0/37642/852e37e3-0743-b05b-f1c8-2cecad3f2583.png)

branch名にバージョン情報があり、ビルドに成功すれば上記のようにShortText(右側に黄色枠で表示されている)で表示します。

```groovy
if (manager.getResult() == "SUCCESS") {
  def branch = manager.build.buildVariables.get("branch")
  if (branch ==~/^v[0-9]+.*/ ) { 
    manager.addShortText(branch)
  }
}

```

今回の場合だと、ビルドが成功時のみおこなっています。

上記以外に、以下の1行があればそのビルドを保存すると行ったことも出来ます。

```groovy
manager.build.keepLog(true)
```
Jenkinsはアプリの保存場所ではないのですが、必要なもののみをあえてとっておくこともあるかと思うので上記も有効かと思います。


## 最後に
Groovy Postbuild Pluginを使えば、上記以外にも色々とやれることはあります。
あくまでも今回はビルド履歴をちょっと良い感じにするといったtipsです。

それ以外にも色々と出来るので、参考資料先にあるサンプルなどを見ながら、自身のプロジェクトにあった形で利用してみると良いかと思います。


## 参考資料
 - https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Postbuild+Plugin
   - 情報が豊富にのっているのでこのページを参考にすれば色々出来ると思います。