概要
- 環境毎に作成された7体のJenkinsを1体に集約した
- 母体となるJenkinsが置かれたサーバに7体分のnodeを作成した
初めに
僕の所属するプロジェクトでは検証環境が複数あります。
それらの検証環境のメンテナンス・デプロイ等は各環境に置かれたJenkinsでやっており、
検証環境は全部で7つあるので、Jenkinsも7体います。
タグ切り後のリリース時には、すべての環境にリリースするために、
それぞれの環境毎にあるJenkinsのウェブページをすべて開いてリリースしなければならなく面倒でした。
また、あるバッチ機能を開発した際にはすべての環境で同じジョブを作成する必要があり、これまた面倒でした。
そこで、環境毎に別れてしまったJenkinsを1体に集約することで上記問題を解決する事にしました。
方法
複数のJenkinsを1体にまとめる方法
JenkinsにはSlave機能というものがあり、1つのjenkinsをmasterとして複数のSlaveに対して操作する事が可能です。
(※Slaveの作成方法はググればすぐに出てくるので、この記事内では触れません)
今回このSlave機能を使って7つのJenkinsを一体にまとめました。
複数のJenkinsをまとめる際に問題となった事はほとんど無かったのですが、
強いて言えば環境変数とssh認証の設定でした。(これらも大した問題ではなかったです)
環境変数
Jenkins毎に環境変数を指定する事ができるのでそれぞれの環境の変数をどうするか?と思ったのですが、
Slave毎に環境変数を設定できたので、一瞬で解決しました。
ssh認証
それぞれのJenkinsに散り散りになっていた公開鍵認証の鍵を一つのサーバでまとめる必要があり、.ssh/configでまとめる必要がありました。
運用方法
複数のJenkinsを一体にまとめた場合、一つのjobを作成すればそれを複数の環境に対して並列に実行する事ができます。
NodeLabel Parameter Pluginを入れて、プロジェクトの設定からこのpluginを選択し「Allow multi node selection for concurrent builds 」と「ビルドを並列実行」にチェックを入れます。
↑「Allow multi node selection for concurrent builds」にチェック
これで、タグ切り後のリリースは1つのジョブを実行するだけで行えるため、複数の環境へのリリースが楽々行えるようになりました。
また、複数の環境にそれぞれ作成していたジョブも一回作成するだけで良くなり、かなり楽になりました。
最後に
たったこれだけで、すべての問題が解決しました。
今までなぜやらなかったのか...と思うくらい簡単にできたので、もし同様の問題に悩んでいる人がいたら是非試してみてください。