Jenkinsとジョブ設定
Jenkinsを導入して、継続的インテグレーションや、デプロイの自動化を行うプロジェクトもここ数年で増えてきたように感じます。(体感)
普通はプラグインの導入でJenkinsのジョブ設定を簡略化すして運用を行いますが、良いプラグインが無い、利用できない場合、そういった場合シェルスクリプトなどでジョブの設定をすることもあると思います。
その場合、Rakeを利用することで、より効率よく高品質な成果物の生成ができます。その理由は、
- 1.ジョブ設定の変更履歴が分かる
- 2.ちょっと複雑なロジックも書ける
- 3.シェルスクリプトの記述もできる
- 4.使い回しができる
- 5.案外学習コストが高くない
かと考えられます。それでは、それぞれの詳細について書き留めますね。
1.ジョブ設定の変更履歴が分かる
Jenkinsを運用していて、ジョブ設定に手を加えるとビルドが通らなくなるケース、よくあると思います。その場合、ジョブ設定の変更履歴がわかれば原因の特定や修正を行う上で非常に役立ちます。
実はJenkinsもJobConfigHistory Pluginを利用することで、ジョブ設定の変更履歴は分かるのですが、このプラグインはXMLで出力してくれるだけなのでちょっと見にくいです。
その点、rakeの動作を定義するRakefie
にジョブ設定を記述しソースコードと一緒にバージョン管理システムで管理をすることで誰が
、いつ
、どのような
変更を加えてその結果
がどうなったのかがすぐ分かります。
2.ちょっと複雑なロジックも書ける
Jenkinsも標準でシェルスクリプトやバッチファイルの実行をサポートしています。しかし、正直シェルスクリプト、バッチファイルで複雑な処理を記述した場合コードの可読性はあまり高くないかと思います。
そしてRakfeileであればオプションの指定ですし、ファイルの移動、コピー、削除などの処理をRubyのDSLで簡潔に記述できます。
3.シェルスクリプトの記述もできる
rubyのKernel.#systemを利用することで外部コマンドを利用することができます。したがって、現在ジョブ設定をシェルスクリプトで定義しているのなら、ほぼそのままそのスクリプトを利用できます。
4.使い回しができる
新たなプロジェクトをスタートする場合、すでに作成したRakefileのパラメータなどを変更するだけで再利用ができるケースがあります。変数やパスなどを変更に耐えうる物として設計することで、汎用性のある定義ファイルの記述ができます。
5.案外学習コストが高くない
Rakefileを記述する上で必要なのはRubyのいくつかの文法とライブラリのAPIだと思います。そこまで学習コストが高くないかと思います。しかし、複雑なRakefileが必要となると、また話は変わってくるのかもしれません。
ただ、複雑なジョブ設定が必要なJenkinsの運用を行っているのなら、それはもしかしたらプロジェクト管理を見直す必要があるのかもしれませんが・・・・。
Rakefileやってみましょう
そんなわけで現在Jenkinsを使って継続的インテグレーション、デプロイなどを行っているプロジェクトでRakefileを利用してみるの、ありだと思います。今までの資源を活かしつつ、便利に高品質な製品を生成できるようになると思いますよ。