auto scalingによるjenkinsのhaの実現とdockerスレーブ

11
Auto Scaling ににに Jenkins に HA にににに Docker にににに 2016/04/12 にににに SHIFT 第 8 第 第第第第第第第第第第第第第 「。」

Upload: -

Post on 07-Jan-2017

1.064 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Auto ScalingによるJenkinsのHAの実現とDockerスレーブ

Auto Scalingによる JenkinsのHAの実現と Dockerスレーブ

2016/04/12株式会社 SHIFT

第 8回「じどうかの窓口。」セミナー

Page 2: Auto ScalingによるJenkinsのHAの実現とDockerスレーブ

アジェンダ Auto Scalingによる Jenkinsの HA

Amazon EC2 pluginによるスレーブの最適化

CloudBees Docker Custom Build Environment Pluginによるビルドのポータルブル化

2

Page 3: Auto ScalingによるJenkinsのHAの実現とDockerスレーブ

3

Auto Scalingによる JenkinsのHA

Page 4: Auto ScalingによるJenkinsのHAの実現とDockerスレーブ

4

Jenkinsのマスターベスト・プラクティス

Jenkinsのマスターは SPOFJenkinsのマスターは「同時ビルド数」を 0にして、ビルドはスレーブに任せ、負荷を下げる

課題とはいえ、管理するスレーブとジョブの数が多くなると、ジョブの完了時のデータ通信、ジョブ間の連携等でマスターが不安定になる

解決策マスターが落ちても Fail overできるように HAの構成を構成を確立する

Page 5: Auto ScalingによるJenkinsのHAの実現とDockerスレーブ

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

Page 6: Auto ScalingによるJenkinsのHAの実現とDockerスレーブ

6

Amazon EC2 pluginによるスレーブの最適化

Page 7: Auto ScalingによるJenkinsのHAの実現とDockerスレーブ

7

AWS上の Jenkinsスレーブ課題

EC2は基本的に時間課金であるスレーブは常時フル稼働している訳ではない負荷が高まったときに自動的にスレーブが増えるようにしたい

解決策Amazon EC2 pluginを使用し、負荷に応じてスレーブを自動的に増減する• ジョブが一定時間滞留すると自動的にスレーブの数が増える• 指定時間スレーブが利用されないと自動的に破棄される• →効率とコストを最適化できる

Page 8: Auto ScalingによるJenkinsのHAの実現とDockerスレーブ

Amazon EC2 plugin応用 Jenkins Operations Centerを使って

EC2 pluginの設定を複数マスターで共通化

Jenkins Master

Jenkins Operations Center

Jenkins Master

EC2 Configuration

EC2 Slave

EC2 Slave

Slave AMI

Page 9: Auto ScalingによるJenkinsのHAの実現とDockerスレーブ

9

CloudBees Docker Custom Build Environment Pluginによるビルドのポータルブル化

Page 10: Auto ScalingによるJenkinsのHAの実現とDockerスレーブ

10

ビルドのポータブル化課題

アプリケーションやサービス毎にビルドの前提環境は異なるAmazon EC2 pluginの tagを使ってアプリケーション別のAMIをメンテナンスすることもできるしかし、ビルトの前提となる環境自体もコードとして管理したい

解決策ビルド環境に Dockerのコンテナを使用するいくつかプラグインがある• CloudBees Docker Custom Build Environment Plugin

– ジョブ毎にコンテナを指定でき柔軟性が高い• CloudBees Docker Pipeline Plugin

– ワークフロー内でdocker変数経由でコンテナを指定できる

スレーブ用 AMIは Gitと Dockerだけ入っていれば良くなる

Page 11: Auto ScalingによるJenkinsのHAの実現とDockerスレーブ

CloudBees Docker Custom Build Environment Plugin

他の CloudBeesプラグインと組み合わせるとDockerイメージの作成、通知、利用までの一連のサイクルを Jenkins上で実現できる

CloudBees Docker Build and Publish pluginCloudBees Docker Hub Notification