Dev@cloudの実装

30
©2010 CloudBees, Inc. All Rights Reserved ©2010 CloudBees, Inc. All Rights Reserved DEV@cloud ののの Jenkins-as-a-Service のののののののののののの のののの

description

CloudBeesのJenkinsホスティング・サービスであるDEV@cloudの実装とテクニックの話です。

Transcript of Dev@cloudの実装

Page 1: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

©2010 CloudBees, Inc. All Rights Reserved

DEV@cloud の実装Jenkins-as-a-Service はどうやって動いているか

川口耕介

Page 2: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

2©2010 CloudBees, Inc. All Rights Reserved

DEV@Cloud とは• Jenkins のホスティング– 1000+ のマスタ– のべ 1,500,000 分以上のビルド

• ソースコード・バイナリリポジトリなど– Git, SVN, Maven

• 現在は EC2 上で動作

Page 3: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

3©2010 CloudBees, Inc. All Rights Reserved

Jenkins マスター• マスターは別々の JVM で– 別の OS ユーザーで

• なぜ?– 隔離– モニタリング・診断などが簡単

• 一台の計算機に多数のマスタを集積– 使われていないインスタンスは乾燥保存

Page 4: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

4©2010 CloudBees, Inc. All Rights Reserved

Jenkins マスターのコード• Core = OSS Jenkins– LTS– 独自パッチはほぼ解消した

• 独自プラグイン群– ユーザーに使われると困るもの

• Groovy Console• マスター上でビルドが起こらないように

– ユーザーが設定する必要のないもの• メールサーバの設定• ルート URL の設定

Page 5: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

5©2010 CloudBees, Inc. All Rights Reserved

Jenkins マスターのデータ• $JENKINS_HOME は EBS に– 1テナント1ボリューム– スナップショットによるバックアップ

• サイズの拡大が可能– 再マウントの為の短いダウンタイムが必要

• スナップショット+クローンを活用したい!– プラグイン実験用の一時的クローンとかどうで

しょう?

Page 6: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

6©2010 CloudBees, Inc. All Rights Reserved

Jenkins の外 :Chef

• Tomcat• 初期設定• ビルドツール• …

package “httpd”cookbook_file “/etc/httpd.conf” do

source “myconfig”endservice “httpd” do action :startend

Page 7: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

7©2010 CloudBees, Inc. All Rights Reserved

Chef のアーキテクチャ

chef-server

slavesweb-tier

masters

Page 8: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

8©2010 CloudBees, Inc. All Rights Reserved

Chef の使い方の工夫• Chef にゼロからスレーブをセットアッ

プさせていると間に合わない

• 予めセットアップしたやつを AMI 化– 残りデルタだけを起動時に Chef にやっても

らう

Page 9: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

9©2010 CloudBees, Inc. All Rights Reserved

Jenkins と Chef/Puppet

Series1

Chef/Puppet

手動管理

手間

台数

Page 10: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

10©2010 CloudBees, Inc. All Rights Reserved

スレーブの割り当ての仕組み• Providore– ブローカー・サービス– Jenkins の外部– Jclouds を使って EC2 API と対話– スレーブの割り当て・プール・破棄

Page 11: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

11©2010 CloudBees, Inc. All Rights Reserved

プールからの割り当て

プール

providore

スレーブくれ!

再利用

Page 12: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

12©2010 CloudBees, Inc. All Rights Reserved

EC2 からの割り当て

ec2 api割り当て

教訓 :• EC2 API が落ちてもよいようにせよ

providore

スレーブくれ!

Page 13: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

13©2010 CloudBees, Inc. All Rights Reserved

初期化と占有

slave

1. LXC を開始2. マスターを割り当て

providore

スレーブくれ!

スレーブ

Page 14: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

14©2010 CloudBees, Inc. All Rights Reserved

スレーブの接続

2. SSH で接続

providore

1. 接続情報通知

スレーブ

Page 15: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

15©2010 CloudBees, Inc. All Rights Reserved

スレーブの接続

2. LXC の破棄・掃除providore

1. 解放

スレーブ

Page 16: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

デモ

Page 17: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

17©2010 CloudBees, Inc. All Rights Reserved

Linux コンテナ• OS レベルの仮想化– 中からは完全な独立 Linux システムのように見える– 実は単一カーネルの上で動いている– Solaris の笑い声が聞こえる…

• スレーブのリサイクルが高速– リセット&リブートは LXC の方が圧倒的に早い

• EC2 からの独立性– テナントの隔離や再利用のロジックがクラウド API に

依存しない方が望ましい

Page 18: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

18©2010 CloudBees, Inc. All Rights Reserved

EC2 Hypervisor

ロシア人形モデル

EC2 Node

LXC Guest

Page 19: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

19©2010 CloudBees, Inc. All Rights Reserved

Linux コンテナ : ワークスペース• LXC ホストには複数テナントの WS が接

続– LXC ゲストは1つしか見えないようになっ

ている– Consistent hash によってできるだけ同じ

ホストにビルドを割り当てる

• 仮想化版の HDD カートリッジ

Page 20: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

20©2010 CloudBees, Inc. All Rights Reserved

Nagios によるモニタリング• jenkins-ci.org も• 拡張可能• テキストベースの設定ファイル– マスターが追加されるたびに自動生成

• PagerDuty との統合• サービス間の依存関係の概念– コア・サービスが落ちた時の大量の通知を防

Page 21: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

21©2010 CloudBees, Inc. All Rights Reserved

モニタすべきもの• ユーザーが見るもの : index ページ• JVM ヒープ、特に permgen• 負荷• ディスクスペース• スレーブの稼動状況

curl http://jenkins/computer/api/json

Page 22: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

22©2010 CloudBees, Inc. All Rights Reserved

未解決問題• マスタが増えるにつれスケーラビリティ

が…• ポーリングからプッシュへ

大丈夫ですか?返事してください!

Page 23: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

23©2010 CloudBees, Inc. All Rights Reserved

Groovy スクリプトコンソール• 探索的トラブルシューティング• データ収集

• Scriptler 2.0– コミュニティのリポジトリから管理スクリ

プトをダウンロードして実行する仕組み– https://github.com/jenkinsci/jenkins-

scripts/

Page 24: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

24©2010 CloudBees, Inc. All Rights Reserved

「一度きり→手作業」 vs 「繰り返し→自動化」

• 他のツールとの連携は我々には「一度きり」ではない– いわゆるスケールメリットというやつ

• エコシステム・パートナー–あらかじめ統合を自動化しておく– ユーザーは連携を有効化するだけ

Page 25: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

25©2010 CloudBees, Inc. All Rights Reserved

まとめ• 野良 Jenkins 、増えていませんか?• 少しずつシステマティックな管理を導入

する– スケールメリット– 一度にやろうとすると無限に先延ばしになっ

てしまう• この事例が参考になりますように

Page 26: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

26©2010 CloudBees, Inc. All Rights Reserved

今週末発売• 入門的内容– Java & Ruby

• チーム間作業の改善–昇進、指紋

• 検証済みマージ– Subversion & Git

• 分散ビルド• Selenium

Page 27: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

27©2010 CloudBees, Inc. All Rights Reserved

Questions?

Thank You!

http://www.cloudbees.com

Page 28: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

28©2010 CloudBees, Inc. All Rights Reserved

2006年• 分散ビルドのサポート

Page 29: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

29©2010 CloudBees, Inc. All Rights Reserved

Elasticity

Page 30: Dev@cloudの実装

©2010 CloudBees, Inc. All Rights Reserved

30©2010 CloudBees, Inc. All Rights Reserved

Jenkins のクラウド化

机の下計算機

分散ビルド

自動伸縮クラスタ多数のマスタ

Elastic マスタ