jenkinsを使った複数クラウドへのインフラci #jenkinsstudy
TRANSCRIPT
Copyright Drecom Co., Ltd. All Rights Reserved.
sue4452016/08/10 第9回Jenkins勉強会
Jenkinsを使った複数クラウドへのインフラCI
Copyright Drecom Co., Ltd. All Rights Reserved.
自己紹介
● Suéyoshi GO a.k.a sue445○ トレーナーレベル 21
● 株式会社ドリコム所属○ 社内ライブラリを中心に、サーバサイドをアプリからインフラまで浅く広
く
● Jenkins関連で作ったもの○ jenkins-backup-script
https://github.com/sue445/jenkins-backup-script○ Jenkinsプラグインのバージョン埋め込みバッジをホスティングするサ
イト http://sebastian-badge.info/○ 他プラグインいろいろ
● 「ドリコムのプリキュアの人」として社内外で有名
Copyright Drecom Co., Ltd. All Rights Reserved.
今期の嫁:はーちゃん
Copyright Drecom Co., Ltd. All Rights Reserved.
本妻:キュアピース
Copyright Drecom Co., Ltd. All Rights Reserved.
Agenda
● 前置き
● インフラCIとは
● 弊社のインフラCIでやってること
● インフラCIの全体像
● 使ってるツールの紹介
● ジョブ構成
● 最後に
● 【おまけ】Jenkins運用
Copyright Drecom Co., Ltd. All Rights Reserved.
前置き
● 今回は尺の関係でだいぶ説明を端折ります
● Jenkinsの構成や使い方に絞って書きます
Copyright Drecom Co., Ltd. All Rights Reserved.
インフラCIとは?
● インフラ環境をCIすること
○ よくある例)PullRequestで検証環境にプロビジョニングを
実行し、問題なければPullRequestをマージ、自動的に本
番環境にも同じプロビジョニングが実行される
● 詳しい資料
○ インフラの継続的デリバリー - naoyaのはてなダイア
リー http://d.hatena.ne.jp/naoya/20140821/1408577976
○ インフラ系技術の流れ - Gosuke Miyashitahttp://mizzy.org/blog/2013/10/29/1/
● 弊社のケースは若干違う(後述)
Copyright Drecom Co., Ltd. All Rights Reserved.
弊社のインフラCIでやってること
インフラJenkinsの主なジョブは下記の2つです
● PullRequestやmasterブランチをAWSなどにプロビジョニング
を実行(開発ビルド)
○ 自動実行
● masterブランチをAWSなどにプロビジョニングを実行し、イ
メージの作成(イメージビルド)
○ インフラチームによる手動実行
Copyright Drecom Co., Ltd. All Rights Reserved.
インフラCIの全体像(開発ビルド)
社内Jenkinsサーバ
ソースをclone
JenkinsがVagrantでAWSなどにインスタンスを立てて、 itamaeのレシピとServerspec実行
Copyright Drecom Co., Ltd. All Rights Reserved.
インフラCIの全体像(イメージビルド)
ソースをclone
packerでitamaeとServerspecを実行して、問題なければイメージ( AMIやテンプレート)を作成する
社内Jenkinsサーバ
AMI
テンプレート
Copyright Drecom Co., Ltd. All Rights Reserved.
使っているツールの紹介
● itamae○ http://itamae.kitchen/○ クックパッドの中の人が作ったプロビジョニングツール
○ Chefの軽量版
● Serverspec○ http://serverspec.org/○ RSpec(Rubyのテスティングフレームワーク)をベースにし
た、インフラ構成をテストするためのツール
○ itamaeで実行したプロビジョニングが本当に設定されてる
かどうかの検証をしている
Copyright Drecom Co., Ltd. All Rights Reserved.
使っているツールの紹介
● Vagrant○ https://www.vagrantup.com/○ HashiCorp社が作った仮想環境の構築ツール
○ VirtualBoxやAWSなどを同一インターフェースで扱える
○ プラグイン導入することでいろんな環境で使える
● Packer○ https://www.packer.io/○ HachiCorp社が作った、複数プラットフォームでイメージを
作成するツール
○ プラグイン導入することでいろんな環境で使える
Copyright Drecom Co., Ltd. All Rights Reserved.
使っているツールの紹介
● Vagrantプラグイン
○ https://github.com/schubergphilis/vagrant-cloudstack○ https://github.com/KariusDx/vagrant-aws (スポットインス
タンス対応のfork版)● IDCFがcloudstackのAPIに対応してるのでvagrantプラグイン
もそのまま使えた
● どちらも社内で使うには若干機能足りてなかったり、バグが
あったのでPR投げた
○ vagrant-cloudstackはmasterに取り込まれたが現時点で
はまだリリースされてない
○ vagrant-awsはPR放置されてる(´・ω・`)
Copyright Drecom Co., Ltd. All Rights Reserved.
開発ビルド用のジョブ
● マルチ構成プロジェクトにして、1つのジョブで同時に複数ビル
ドが実行できるようにしてる
● pipeline化したいけど、複数のジョブのコンソールログが1ヶ所
になって混ざってしまうので移行はしてない
Copyright Drecom Co., Ltd. All Rights Reserved.
開発ビルド用のジョブ
縦の軸はどのクラウドに対してプロビジョニングをするかどうか
● 対応するVagrantプラグインをインストールして
● vagrant up --provider=$PROVIDER みたいな感じで実行
$PROVIDER
Copyright Drecom Co., Ltd. All Rights Reserved.
開発ビルド用のジョブ
横の軸は使用するnodeファイル(設定ファイル)
● リポジトリにコミットしてるのはdefault.yml(role全無し)だけだ
が、ビルド時にrolesを全部付与したyml(role_all.yml)を生成
してビルドを実行することにより、role全有り、全無しを両方テ
ストしてる
$NODE
Copyright Drecom Co., Ltd. All Rights Reserved.
roleについて
● packageは全部インストールするが、role(web, db, job, cacheなどのサーバの役割)に応じてserviceの起動を制御し
ている
○ 例)dbサーバでもnginxはインストールするがroleがweb以外だとserviceは起動しない
○ packageを全部入れてるのはオートスケーリングで起動す
る時に1秒でも起動時間を早めたいため
● roleが変わると実行されるレシピと必要なテストも変わるので、
roll全有り、全無し両方実行することにより最低でもC0カバレッ
ジ 100%は担保
Copyright Drecom Co., Ltd. All Rights Reserved.
イメージビルド用のジョブ
Copyright Drecom Co., Ltd. All Rights Reserved.
イメージビルド用のジョブ
● RUN_FLAG● masterブランチからのwebhookを受けた時に実行されな
いようにするためのフラグ
● チェックを入れて手動実行しないとイメージが作られないよ
うにしてる(他に良いやり方あったら知りたい。。。)
Copyright Drecom Co., Ltd. All Rights Reserved.
イメージビルド用のジョブ
● ACCOUNT● 弊社だとサービス単位(費用が発生する請求単位)で
AWSやIDCFのアカウントが複数分かれているので、作成
先のアカウントを選択できるようにしてる
● API実行のためのトークンが $JENKINS_HOME/accounts/ に保存されていて、アカウ
ントファイル(プルダウンの名前)をスクリプト内で読み込ん
でいる
Copyright Drecom Co., Ltd. All Rights Reserved.
イメージビルド用のジョブ
● パラメータが多いけど、Rebuilder Pluginで一度使ったパラ
メータを使いまわせるようにしてるので2回目以降はそんなに
大変ではない
○ https://wiki.jenkins-ci.org/display/JENKINS/Rebuild+Plugin
● イメージ作成に成功したらgitのtagを作り、かつイメージにも
tagと同じ名前をつけることにより、イメージからどの時点の
ソースコードを元にビルドしたかが特定できるようにしてる
Copyright Drecom Co., Ltd. All Rights Reserved.
イメージビルド用のジョブ
git tags
AMI
Copyright Drecom Co., Ltd. All Rights Reserved.
最後に
● 複数のクラウドに対するインフラCIの事例はあまり見ないの
で、参考になったら幸いです
Copyright Drecom Co., Ltd. All Rights Reserved.
【おまけ】Jenkins運用
● Jenkinsサーバ構築自体もitamaeで行ってる○ コマンド1つで必要なミドル一式(jenkins, nginx, vagrant, packer,
virtualbox辺り)全部入るようになってる
● webから設定する部分(インストールしてるプラグインとか)は
全部社内confluenceにまとめた
● バックアップ○ 1日1回 https://github.com/sue445/jenkins-backup-script を定期実
行して設定やプラグイン一式をtarに保存
○ tarを物理的に別の所にあるバックアップサーバに転送
○ Jenkinsマシンがいつ死んでもすぐに復旧できるようになってる