くりにっき

フルスタックキュアエンジニアです

Jenkins Yaml Axis Pluginを作った

正月休みから作ってたやつが完成したので公開しました

f:id:sue445:20160108112326p:plain

Jenkins Yaml Axis Pluginについて

Yaml Axis Plugin - Jenkins - Jenkins Wiki

github.com

Travis CIみたいにyamlファイルからマトリックステストの軸を作成するためのプラグインです

使い方

1. リポジトリyamlファイルをコミット

# axis.yml
RUBY_VERSION:
  - 2.1.8
  - 2.2.4
  - 2.3.0

DATABASE:
  - mysql
  - postgres
  - oracle

2. 軸を設定でyamlファイルとkeyを設定する

f:id:sue445:20160108010921p:plain

面倒かもしれないですが1つずつファイル設定してください (matrix project pluginのソースを読んだけど一箇所で複数の軸を設定するのは無理っぽかった)

3. 実際にビルドするとyamlの値で軸が作られる

f:id:sue445:20160108011202p:plain

今までJenkinsだとマトリクステストの組み合わせの設定をリポジトリに含めることができなかったですが、Yaml Axis Pluginを使うと設定をリポジトリに含めることができるようになるので是非お使いください。

その他

今回初めてGroovy と GradleでJenkinsプラグインを作った

プラダクトコードにもJavaは使ってないですw

f:id:sue445:20160108012146p:plain

通常Jenkinsプラグインを作る時はmavenなのですが、gradle jpi pluginを使えばmaven使わずにgradleでプラグインの公開までできます

github.com

Gradle JPI Plugin - Jenkins - Jenkins Wiki

ハマりどころとしては、groovyとgradleがそれぞれ古いバージョンに依存しているため最新のものが使えないということです

groovyはJenkinsにバンドルされているバージョンしか使えない (v1.8.9)

  • 2系でもプラグインのビルドはできるんですが、Jenkinsにマウントした時にエラーになることがある。
  • 今回の場合、スーパークラスコンストラクタを呼びだそうとした時に「コンストラクタの数が一致しない」的な実行時エラーが出て、Groovyのバージョン違いが原因だと気づくのに2日くらいかかりました。。。*1
  • あと1.8だと withCloseable が使えないのが厳しい

gradle jpi pluginがgradle 2.3でしか動かない模様

  • 2.10を使ったら gradle jpi でStackOverflowErrorがおきた
  • CHANGELOG を見ると「fixed StackOverflowError when using Gradle 2.8」って書いてあるので治ってはいそうなんですが、2.8でも同じエラーが起きたので2.3使うのが確実っぽい

このように最新バージョンが使えないのは厳しいところですが、素のJavaMaven使うのに比べたらかなり楽でした

Groovy最高!!!!Gradle最高!!!!

プラグインの公開申請方法が変わってた

以前まではJenkinsプラグインを公開(githubのjenkinsci organizationへのforkやcloudbeesの設定)する時はメーリングリストでの依頼だったのですが、Jiraでチケットを上げるようになってました*2

https://wiki.jenkins-ci.org/display/JENKINS/Hosting+Plugins#HostingPlugins-Requesthosting

僕のチケットはこんな感じ(Jiraはログインしないと見れないのでスクショ貼ります) f:id:sue445:20160108012741p:plain

*1:ユニットテストだと問題なかったので、テストとJenkinsで使われてるgroovyのバージョンが違うんだろうなぁということで原因判明

*2:メーリングリストプラグイン公開依頼が2ヶ月前くらいから止まっていたので調べたらJiraに移行してたのが分かった