Kyoto.なんか #4で最近運用しているJenkinsの情報について発表してきました
[2020-09-07追記]
この構成,もうウチではやってません!!!!
moznion.hatenadiary.com
[追記ここまで]
表題の通り,最近AWS上で運用しているスケールする & 運用が省エネなJenkinsについて発表してきました.
簡単にまとめると
- JenkinsのslaveをAWS CodeBuildに委譲することで実質無限のスケールアウトとメンテコスト削減を実現
- JenkinsのストレージをAmazon EFSにすることでロバスト性と自動ボリューム拡張を実現
- ElasticBeanstalk with Dockerを使って運用することで運用コストの省力化
という内容です.
会場やインターネットで質問されたことについては以下のとおりです:
値段的には従来のサービスを使うよりも下がったかどうか?
- 試算的には下がっている
- やはりCIが寝ている時間が多いと,CodeBuildの時間貸しスタイルがうまくはまって効くという感じ
- とはいえ今後継続的にコストの実測を行って経過観察をする必要がある
強い環境でビルドしたいという話だったが,CodeBuildはインスタンスタイプを選べる?
- 選べる
3 GB メモリ、2vCPU
7 GB メモリ、4vCPU
15 GB メモリ、8vCPU
- (会場ではうろ覚えで間違えたスペックを口走ったかもしれません,すみません)
CodeBuild上でのビルド環境はDockerということだったが,このDockerイメージはどこかにアップロードしておく? あとキャッシュみたいなのは効く?
- CodeBuild上ではサポートされている言語であれば素のDockerイメージが提供されており,その上でビルドを行うことができる
- 独自のビルド環境が欲しいのであれば自分でDockerイメージを構築してECRにアップロードして利用すれば良い
- キャッシュについては任意のファイル (or ディレクトリ) をS3に突っ込んでキャッシュすることができるので便利
- 例えば解決済みの
node_modules
のようなものをキャッシュしておくことが可能
- 例えば解決済みの
プラグイン管理が魔界にならないか
- プラグインについては基本的にJenkinsのUIからインストールしないようにしている
plugins.txt
でJenkinsのインストールプラグインを管理しており,入れるべきプラグインについては構成管理がされているというような状態- Gemfileみたいなイメージ
- このような感じ: https://github.com/moznion/jenkins_eb_efs_codebuild_example/blob/42a3722e80ba56a2286cc421eed35ed24ac58334/plugins.txt
- そのプラグイン群をDockerfileでDockerイメージを組む時にあらかじめインストールしているという感じ: https://github.com/moznion/jenkins_eb_efs_codebuild_example/blob/42a3722e80ba56a2286cc421eed35ed24ac58334/Dockerfile#L7
- Ref: linux - Installing Jenkins Plugins to Docker Jenkins - Stack Overflow
- なおJenkinsに入っているプラグイン一覧については,スクリプトコンソールから以下のgroovyスクリプトを流すことで引っ張ってくることができる (それでpre-installedなプラグインの一覧を引っ張ってきてplugins.txtに書き込んである)
Jenkins.instance.pluginManager.plugins.each{ plugin -> println ("${plugin.getShortName()}") }
Jenkinsは色々とランタイムを入れられて環境が汚くなる印象があるがどのように対処しているか
- 実際のビルド環境は基本的にCodeBuild上なのでJenkinsがいたずらに汚くなることはなさそう
- なんらかのランタイムをインストールする必要がある場合はDockerfileで構成管理するぞ,という気持ち
- (まだその状況に至っていない)
という感じでした.参考になれば幸いです.
Kyoto.なんかはいろいろおもしろい話が聞けて楽しいですね.来年の開催も楽しみにしています!!