読者です 読者をやめる 読者になる 読者になる

Jenkins の設定内容をリポジトリで管理したい

Jenkins の設定内容がウェブで操作できるのは便利と言えば便利なんだが、設定をいろいろ弄っている間にどこ変更したか分からなくなるとか、他人が勝手に設定変更して気付いたらビルド出来なくなるとか、そういう問題が起こる。

そもそもリポジトリの中身を勝手にビルドして変更内容に問題ないかを確認したりするツールなのに、ツール自体の設定内容はリポジトリで管理しないのはあまりにナンセンスだと思う。

例えば TravisCI では、 CI が行なう処理を travis.yml というファイルに書いておけば良い。上記の問題が解決されている。

そういうことを Jenkins でもしたいなと思って Plugins をざっと眺めて見たが、よさそうなプラグインは無かった。

そもそも、 Jenkins を使っている人たちは、一つの Job に対して単一の処理 (build という job なら build だけ) しか行なわないようにしている人が多いと思う。そういう場合、 travis.yml のような 1 つのファイルに設定内容を集約するのはちょっと無理がある。


例えばこういうのはどうだろうか。ソースコードを管理しているリポジトリがあったとして、 jenkins というフォルダに処理内容を記述したシェルスクリプトを置く。

  • リポジトリ
    • src/...
    • libs/...
    • jenkins/
      • build.sh
      • unit-test.sh
      • integration-test.sh
      • deploy.sh
      • pullreq.sh

で、 Jenkins の Job 名を {PROJECT_NAME}-{JOB_TYPE} とかにする。 JOB_TYPE というのは build とか unit-test とかで、 jenkins 用シェルスクリプトと名前を対応させる。

あとは、 Jenkins の Execute Shell でそのシェルスクリプトを実行すればよい。


さて、ここで問題になるのが Jenkins で便利なプラグインである。 SCM や Trigger の設定は手動でやらないと始まらないのは仕方ないとして、どのプラグインを使って結果を集約するとか、アラートメールを送るだとかいうのはシェルスクリプトでは指定できない。

プラグインの設定内容を yaml とかで記述して、 Jenkins REST API を使って設定するプラグインとか無いんだろうか。ありそうで無いんだよなあ。