jenkinsを使った複数クラウドへのインフラci #jenkinsstudy

24
Copyright Drecom Co., Ltd. All Rights Reserved. sue445 2016/08/10 9Jenkins勉強会 Jenkinsを使った複数 クラウドへのインフラ CI

Upload: go-sueyoshi-aka-sue445

Post on 06-Jan-2017

2.726 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

Copyright Drecom Co., Ltd. All Rights Reserved.

sue4452016/08/10 第9回Jenkins勉強会

Jenkinsを使った複数クラウドへのインフラCI

Page 2: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

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/○ 他プラグインいろいろ

● 「ドリコムのプリキュアの人」として社内外で有名

Page 3: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

Copyright Drecom Co., Ltd. All Rights Reserved.

今期の嫁:はーちゃん

Page 4: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

Copyright Drecom Co., Ltd. All Rights Reserved.

本妻:キュアピース

Page 5: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

Copyright Drecom Co., Ltd. All Rights Reserved.

Agenda

● 前置き

● インフラCIとは

● 弊社のインフラCIでやってること

● インフラCIの全体像

● 使ってるツールの紹介

● ジョブ構成

● 最後に

● 【おまけ】Jenkins運用

Page 6: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

Copyright Drecom Co., Ltd. All Rights Reserved.

前置き

● 今回は尺の関係でだいぶ説明を端折ります

● Jenkinsの構成や使い方に絞って書きます

Page 7: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

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/

● 弊社のケースは若干違う(後述)

Page 8: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

Copyright Drecom Co., Ltd. All Rights Reserved.

弊社のインフラCIでやってること

インフラJenkinsの主なジョブは下記の2つです

● PullRequestやmasterブランチをAWSなどにプロビジョニング

を実行(開発ビルド)

○ 自動実行

● masterブランチをAWSなどにプロビジョニングを実行し、イ

メージの作成(イメージビルド)

○ インフラチームによる手動実行

Page 9: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

Copyright Drecom Co., Ltd. All Rights Reserved.

インフラCIの全体像(開発ビルド)

社内Jenkinsサーバ

ソースをclone

JenkinsがVagrantでAWSなどにインスタンスを立てて、 itamaeのレシピとServerspec実行

Page 10: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

Copyright Drecom Co., Ltd. All Rights Reserved.

インフラCIの全体像(イメージビルド)

ソースをclone

packerでitamaeとServerspecを実行して、問題なければイメージ( AMIやテンプレート)を作成する

社内Jenkinsサーバ

AMI

テンプレート

Page 11: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

Copyright Drecom Co., Ltd. All Rights Reserved.

使っているツールの紹介

● itamae○ http://itamae.kitchen/○ クックパッドの中の人が作ったプロビジョニングツール

○ Chefの軽量版

● Serverspec○ http://serverspec.org/○ RSpec(Rubyのテスティングフレームワーク)をベースにし

た、インフラ構成をテストするためのツール

○ itamaeで実行したプロビジョニングが本当に設定されてる

かどうかの検証をしている

Page 12: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

Copyright Drecom Co., Ltd. All Rights Reserved.

使っているツールの紹介

● Vagrant○ https://www.vagrantup.com/○ HashiCorp社が作った仮想環境の構築ツール

○ VirtualBoxやAWSなどを同一インターフェースで扱える

○ プラグイン導入することでいろんな環境で使える

● Packer○ https://www.packer.io/○ HachiCorp社が作った、複数プラットフォームでイメージを

作成するツール

○ プラグイン導入することでいろんな環境で使える

Page 13: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

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放置されてる(´・ω・`)

Page 14: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

Copyright Drecom Co., Ltd. All Rights Reserved.

開発ビルド用のジョブ

● マルチ構成プロジェクトにして、1つのジョブで同時に複数ビル

ドが実行できるようにしてる

● pipeline化したいけど、複数のジョブのコンソールログが1ヶ所

になって混ざってしまうので移行はしてない

Page 15: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

Copyright Drecom Co., Ltd. All Rights Reserved.

開発ビルド用のジョブ

縦の軸はどのクラウドに対してプロビジョニングをするかどうか

● 対応するVagrantプラグインをインストールして

● vagrant up --provider=$PROVIDER みたいな感じで実行

$PROVIDER

Page 16: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

Copyright Drecom Co., Ltd. All Rights Reserved.

開発ビルド用のジョブ

横の軸は使用するnodeファイル(設定ファイル)

● リポジトリにコミットしてるのはdefault.yml(role全無し)だけだ

が、ビルド時にrolesを全部付与したyml(role_all.yml)を生成

してビルドを実行することにより、role全有り、全無しを両方テ

ストしてる

$NODE

Page 17: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

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%は担保

Page 18: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

Copyright Drecom Co., Ltd. All Rights Reserved.

イメージビルド用のジョブ

Page 19: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

Copyright Drecom Co., Ltd. All Rights Reserved.

イメージビルド用のジョブ

● RUN_FLAG● masterブランチからのwebhookを受けた時に実行されな

いようにするためのフラグ

● チェックを入れて手動実行しないとイメージが作られないよ

うにしてる(他に良いやり方あったら知りたい。。。)

Page 20: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

Copyright Drecom Co., Ltd. All Rights Reserved.

イメージビルド用のジョブ

● ACCOUNT● 弊社だとサービス単位(費用が発生する請求単位)で

AWSやIDCFのアカウントが複数分かれているので、作成

先のアカウントを選択できるようにしてる

● API実行のためのトークンが $JENKINS_HOME/accounts/ に保存されていて、アカウ

ントファイル(プルダウンの名前)をスクリプト内で読み込ん

でいる

Page 21: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

Copyright Drecom Co., Ltd. All Rights Reserved.

イメージビルド用のジョブ

● パラメータが多いけど、Rebuilder Pluginで一度使ったパラ

メータを使いまわせるようにしてるので2回目以降はそんなに

大変ではない

○ https://wiki.jenkins-ci.org/display/JENKINS/Rebuild+Plugin

● イメージ作成に成功したらgitのtagを作り、かつイメージにも

tagと同じ名前をつけることにより、イメージからどの時点の

ソースコードを元にビルドしたかが特定できるようにしてる

Page 22: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

Copyright Drecom Co., Ltd. All Rights Reserved.

イメージビルド用のジョブ

git tags

AMI

Page 23: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

Copyright Drecom Co., Ltd. All Rights Reserved.

最後に

● 複数のクラウドに対するインフラCIの事例はあまり見ないの

で、参考になったら幸いです

Page 24: Jenkinsを使った複数クラウドへのインフラCI #jenkinsstudy

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マシンがいつ死んでもすぐに復旧できるようになってる