えーっと別の構想があったのですが、時間足らず逃げました。
まだまだおじさんカレンダー開いているのでもしかしたら二発目行くかもしれません。
で、本題
現状Jenkins2のPipelineは発展途上にあると思っています。
惜しい部分やらなんやらが結構ありまして、そういう部分をフォローしようと思います。
本格的に使えるようになったらすべてのジョブをPipelineにしたいと思っていますが、そうもいかない現在って感じですね。
サーバーデプロイなんかはもうほとんどpipelineで行けそうなんですけどね
1.ほとんどのサードパーティプラグインのステップが対応していない問題
サーバーのデプロイなどをやっている間はあまり影響ないと思うのですが、かなりの数のプラグインがPipelineに対応していません。
例えばUnityのプラグインなんかがそうです。
これはたぶんJenkins側Pipelineがレガシーな奴も動くような対応しないと解決しないと思うのですが、現状そうなっていません。
解決策
その部分だけフリースタイルで作って
buildステップで呼び出す
これだけでも例えばリトライ処理なんかを記述するのが簡単になるのでお勧めです。
ただ、問題として
- ジョブのトップページから下流ジョブとしてリンクが張られない
- もちろん下流ジョブのログが出ない
があります。
また、失敗を検出したい場合はpropagateをfalseにしないと下流ビルドが失敗した時点でメインも失敗で終わるから注意な!
ただその場合はretryコードでくくっても成功になっちゃうのでresultで結果を確かめて自前で例外投げなきゃだめだぞ!
2.そのままではほとんどのJava由来のクラスが使えない
セキュリティの関係でCPSという技術があってほとんどがエラーになります。
ArrayListでさえも!
いやマジで困るんですけど!!
解決策
NoNCPS属性をメソッドにつける
というのはありますが、例えばちょっとづつforeachでジョブ回したいとか結構面倒くさいです…
また初めて使うメソッドはそれ許可されてねーよってエラーが出るので
Jenkinsの管理からIn-process Script Approvalページで許可する必要があります。
現状GUIでは一括でクラス単位での許可なんかはできません!
またNoNCPSだと例外を投げてもコンソールに出してくれないという悲しい現実もあるので
ログは過剰なぐらいはいたほうがいいです。
3.ドキュメントがあんまりない
例えばjobステップの戻り値はどこにも書いてありませんが
http://[Jenkinsのurl]/pipeline-syntax/globals#currentBuild
と同じだと思います。
解決策
ソースコード転がってるから読んでみよう!
以上
ちなみにわかりにくいけどオンラインのステップドキュメントはこちらになります
https://jenkins.io/doc/pipeline/steps/
4.ちょくちょくバグってる
安定はまだもう少し先になりそうです。
ただ、Jenkins側も力を注いでいる部分なのですぐに修正されることも多いです。
イシュートラッカーみてみて、プラグインアップデートしましょう。