auto scalingによるjenkinsのhaの実現とdockerスレーブ
TRANSCRIPT
Auto Scalingによる JenkinsのHAの実現と Dockerスレーブ
2016/04/12株式会社 SHIFT
第 8回「じどうかの窓口。」セミナー
アジェンダ Auto Scalingによる Jenkinsの HA
Amazon EC2 pluginによるスレーブの最適化
CloudBees Docker Custom Build Environment Pluginによるビルドのポータルブル化
2
3
Auto Scalingによる JenkinsのHA
4
Jenkinsのマスターベスト・プラクティス
Jenkinsのマスターは SPOFJenkinsのマスターは「同時ビルド数」を 0にして、ビルドはスレーブに任せ、負荷を下げる
課題とはいえ、管理するスレーブとジョブの数が多くなると、ジョブの完了時のデータ通信、ジョブ間の連携等でマスターが不安定になる
解決策マスターが落ちても Fail overできるように HAの構成を構成を確立する
AWS上で HA Auto Scaling = 1を使用する
EC2インスタンス• Jenkinsがインストール済みの AMIを用意しておく• Auto Scaling = 1でインスタンスが異常終了しても別インスタンスを起動して復帰できる
データ• /var/lib/jenkins用の EBSは別作成し、 Auto Scalingのユーザーデータで起動時にマウントする
• /var/lib/jenkins用 EBSは定期的にスナップショットを作成する
固定 URL• 手前に ELBを置き、場合によって Route53で更に固定 DNSを設定する
5Jenkins MasterELB
Master AMI
/var/lib/jenkins
6
Amazon EC2 pluginによるスレーブの最適化
7
AWS上の Jenkinsスレーブ課題
EC2は基本的に時間課金であるスレーブは常時フル稼働している訳ではない負荷が高まったときに自動的にスレーブが増えるようにしたい
解決策Amazon EC2 pluginを使用し、負荷に応じてスレーブを自動的に増減する• ジョブが一定時間滞留すると自動的にスレーブの数が増える• 指定時間スレーブが利用されないと自動的に破棄される• →効率とコストを最適化できる
Amazon EC2 plugin応用 Jenkins Operations Centerを使って
EC2 pluginの設定を複数マスターで共通化
Jenkins Master
Jenkins Operations Center
Jenkins Master
EC2 Configuration
EC2 Slave
EC2 Slave
Slave AMI
9
CloudBees Docker Custom Build Environment Pluginによるビルドのポータルブル化
10
ビルドのポータブル化課題
アプリケーションやサービス毎にビルドの前提環境は異なるAmazon EC2 pluginの tagを使ってアプリケーション別のAMIをメンテナンスすることもできるしかし、ビルトの前提となる環境自体もコードとして管理したい
解決策ビルド環境に Dockerのコンテナを使用するいくつかプラグインがある• CloudBees Docker Custom Build Environment Plugin
– ジョブ毎にコンテナを指定でき柔軟性が高い• CloudBees Docker Pipeline Plugin
– ワークフロー内でdocker変数経由でコンテナを指定できる
スレーブ用 AMIは Gitと Dockerだけ入っていれば良くなる
CloudBees Docker Custom Build Environment Plugin
他の CloudBeesプラグインと組み合わせるとDockerイメージの作成、通知、利用までの一連のサイクルを Jenkins上で実現できる
CloudBees Docker Build and Publish pluginCloudBees Docker Hub Notification