Jenkinsの「Workflow Plugin」のデモ用ジョブを試す

最近、Workflow Plugin というものがリリースされました。
Jenkinsユーザカンファレンスで度々話題に出ていたものです。
動画はPCの調子が悪く見れず、発表資料をちらりと見た程度ですが、習うより慣れろです。

似たPluginとして Build Flow Plugin があります。
Workflow Plugin は Build Flow Plugin をよりパワーアップさせた版、という印象です。

ちなみに Build Flow Plugin の Wiki には、
「You probably would be interested by https://github.com/jenkinsci/workflow-plugin as a possible alternative.」
と書かれていました。

# 公式のデモを試す

とりあえず触ってみないと分からないのですが、かといって目的もなく使おうとしてもピンとこないので、Githubで公開されているデモを試してみました。

https://github.com/jenkinsci/workflow-plugin/blob/master/demo/README.md

Docker が必要ですので、Docker 環境をご利用下さい。
私は、coreosのvagrant版を使用しています。
VirtualBoxのポートフォワーディングをいい感じに設定して、ホストOS（Win7）からブラウザでJenkinsにアクセスできるようにしています。

# デモジョブの設定を見てみる

さっそくデモ用Jenkinsへアクセスしてみます。
8080はJettyのポートらしく、Jenkinsは8081とのことです。
どうやらデモ用ジョブを実行することで、Jettyのアプリがビルド・テスト・デプロイされるようでした。

![WorkflowPlugin-Demo-001.png](https://qiita-image-store.s3.amazonaws.com/0/27201/3763a861-5761-bb6c-e032-b17733decfca.png)

ジョブの設定は↓のような感じです。

![WorkflowPlugin-Demo-002.png](https://qiita-image-store.s3.amazonaws.com/0/27201/6b831a07-86fb-c073-b9df-291a33e5dd04.png)

この Workflow Pluginは、Build Flow Plugin よりも広い範囲をGroovyで設定できるようにする代物のようです。
プログラマブルに設定できるのは大歓迎ですが、DSLはとっつきにくさがありますよね...。

「Snippet Generator」をチェックすると、見慣れたUIからDSLに変換してくれる機能が出てきます。

![WorkflowPlugin-Demo-003.png](https://qiita-image-store.s3.amazonaws.com/0/27201/0584abab-8a4c-4a65-4bb3-c64fd54905e7.png)

適当なシェルスクリプトを変換する場合。

![WorkflowPlugin-Demo-004.png](https://qiita-image-store.s3.amazonaws.com/0/27201/b5f346e6-8e7c-9cee-f66e-b8b528b2418a.png)

　※ これはエスケープが面倒くさい...かも？

他に追加したプラグインも設定できるのか試してみます。
多くのJenkins使いがお世話になっているだろう「Email-ext plugin」をインストールし、もう一度Snippet Generatorを見てみましが、残念ながら選択肢には加わりませんでした。

この辺の仕様はドキュメントを読みつつ試してみないと理解できないので、今はさくっとデモジョブを実行してみます。

# デモ用ジョブを実行する

何も考えず実行してみます。

![WorkflowPlugin-Demo-005.png](https://qiita-image-store.s3.amazonaws.com/0/27201/da5e1924-5ab6-5d9a-96b9-7d8bff3deebf.png)

![WorkflowPlugin-Demo-006.png](https://qiita-image-store.s3.amazonaws.com/0/27201/0fdfbea4-b5c0-f4b6-cbac-d7858f622d08.png)

よく見慣れた感じですね。

/var/lib/jenkins/workflow-plugin-pipeline-demo から git clone し、flow.groovy を読み込んでいるので、この Groovy にがっつり設定が盛り込まれているようです。

Github上で公開されているので、そちらを見てみました。
https://github.com/jenkinsci/workflow-plugin-pipeline-demo/blob/master/flow.groovy

stage というメソッドが良く出てきます。
意味は、workflow-plugin の Github に書いてありました。

```
Pipeline stages

Workflows can be divided into sequential stages, not only for labeling but to throttle concurrency.
```

パイプラインを作るタスクのようです。
今までJenkinsでのパイプラインの単位はジョブでしたが、このPluginではよりさっくり作れるようです。
パイプラインといったら、Build Pipeline View で様子を確認したくなりますが、Workflowジョブは、Build Pipelien View で選択できるジョブに含まれません。

「Running Steps」という画面が用意されていました。

![WorkflowPlugin-Demo-007.png](https://qiita-image-store.s3.amazonaws.com/0/27201/f072f746-18c9-ef75-d73b-c0f52aec3c6d.png)
![WorkflowPlugin-Demo-008.png](https://qiita-image-store.s3.amazonaws.com/0/27201/9d6bf6f3-5589-26d7-0a6d-05d1d95075d2.png)


しばらく放置していると、Input でビルドの実行状態が点滅したままになりました。

![WorkflowPlugin-Demo-009.png](https://qiita-image-store.s3.amazonaws.com/0/27201/66fa4cdf-e8c8-71f4-3a99-091cfc58b429.png)

コンソール出力を見てみると、

![WorkflowPlugin-Demo-010.png](https://qiita-image-store.s3.amazonaws.com/0/27201/fa46d3a3-99c5-d741-35ca-7feccf015c99.png)

となっています。

この部分のGroovyは

```
def production() {
    input message: "Does http://localhost:8080/staging/ look good?"
```

と思います。
なるほど、これは便利そうですね。

言われた通りのURLを確認してみると、
Jenkinsさんがこんにちはしてくれたので、Proceed をクリックします。

![WorkflowPlugin-Demo-011.png](https://qiita-image-store.s3.amazonaws.com/0/27201/0d921578-5fb5-ba15-9b0b-7d652437eba6.png)

無事、最後までビルドできました。

![WorkflowPlugin-Demo-012.png](https://qiita-image-store.s3.amazonaws.com/0/27201/bec15b05-2753-1669-7430-25780ab2a56c.png)

warが成果物として保存されています。
下のシンタックスで定義されていました。

```
archive 'target/x.war'
```
先の Running Steps でも「Archive Artifacts」がありましたね。


# 感想

まだ調べきれていないのではっきりとは言えませんが、
プラグインの機能をDSLで設定できるのかどうかが気になります...

一応、他のジョブを呼ぶこともできるので、細かく分けられたジョブをまとめるトリガージョブとして使うことができるかもしれません。

また、ビルドが失敗した時の調査がしやすいかどうか分かりません。
プログラマブルな分、プログラマーには優しくなったような、でも仕様を理解しないとかえってメンテナンスし辛いような。

ジョブのフローがぐちゃぐちゃで困っている人には役に立ちそうな気がします。


~~詳しくて正しい話は、きっと来月の JUC Tokyo で発表されるのではないでしょうか（勘）。~~

発表されました。