Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

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

5.285 visualizaciones

Publicado el

第9回Jenkins勉強会 - connpass ( http://jenkins.connpass.com/event/35030/ ) のLT資料です

Publicado en: Tecnología
  • Sé el primero en comentar

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

  1. 1. Copyright Drecom Co., Ltd. All Rights Reserved. sue445 2016/08/10 第9回Jenkins勉強会 Jenkinsを使った複数 クラウドへのインフラ CI
  2. 2. 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/ ○ 他プラグインいろいろ ● 「ドリコムのプリキュアの人」として社内外で有名
  3. 3. Copyright Drecom Co., Ltd. All Rights Reserved. 今期の嫁:はーちゃん
  4. 4. Copyright Drecom Co., Ltd. All Rights Reserved. 本妻:キュアピース
  5. 5. Copyright Drecom Co., Ltd. All Rights Reserved. Agenda ● 前置き ● インフラCIとは ● 弊社のインフラCIでやってること ● インフラCIの全体像 ● 使ってるツールの紹介 ● ジョブ構成 ● 最後に ● 【おまけ】Jenkins運用
  6. 6. Copyright Drecom Co., Ltd. All Rights Reserved. 前置き ● 今回は尺の関係でだいぶ説明を端折ります ● Jenkinsの構成や使い方に絞って書きます
  7. 7. Copyright Drecom Co., Ltd. All Rights Reserved. インフラCIとは? ● インフラ環境をCIすること ○ よくある例)PullRequestで検証環境にプロビジョニングを 実行し、問題なければPullRequestをマージ、自動的に本 番環境にも同じプロビジョニングが実行される ● 詳しい資料 ○ インフラの継続的デリバリー - naoyaのはてなダイア リー http://d.hatena.ne.jp/naoya/20140821/1408577976 ○ インフラ系技術の流れ - Gosuke Miyashita http://mizzy.org/blog/2013/10/29/1/ ● 弊社のケースは若干違う(後述)
  8. 8. Copyright Drecom Co., Ltd. All Rights Reserved. 弊社のインフラCIでやってること インフラJenkinsの主なジョブは下記の2つです ● PullRequestやmasterブランチをAWSなどにプロビジョニング を実行(開発ビルド) ○ 自動実行 ● masterブランチをAWSなどにプロビジョニングを実行し、イ メージの作成(イメージビルド) ○ インフラチームによる手動実行
  9. 9. Copyright Drecom Co., Ltd. All Rights Reserved. インフラCIの全体像(開発ビルド) 社内Jenkinsサーバ ソースをclone JenkinsがVagrantで AWSなどにインスタン スを立てて、itamaeのレ シピとServerspec実行
  10. 10. Copyright Drecom Co., Ltd. All Rights Reserved. インフラCIの全体像(イメージビルド) ソースをclone packerでitamaeとServerspecを実行 して、問題なければイメージ( AMIや テンプレート)を作成する 社内Jenkinsサーバ AMI テンプレート
  11. 11. Copyright Drecom Co., Ltd. All Rights Reserved. 使っているツールの紹介 ● itamae ○ http://itamae.kitchen/ ○ クックパッドの中の人が作ったプロビジョニングツール ○ Chefの軽量版 ● Serverspec ○ http://serverspec.org/ ○ RSpec(Rubyのテスティングフレームワーク)をベースにし た、インフラ構成をテストするためのツール ○ itamaeで実行したプロビジョニングが本当に設定されてる かどうかの検証をしている
  12. 12. Copyright Drecom Co., Ltd. All Rights Reserved. 使っているツールの紹介 ● Vagrant ○ https://www.vagrantup.com/ ○ HashiCorp社が作った仮想環境の構築ツール ○ VirtualBoxやAWSなどを同一インターフェースで扱える ○ プラグイン導入することでいろんな環境で使える ● Packer ○ https://www.packer.io/ ○ HachiCorp社が作った、複数プラットフォームでイメージを 作成するツール ○ プラグイン導入することでいろんな環境で使える
  13. 13. 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放置されてる(´・ω・`)
  14. 14. Copyright Drecom Co., Ltd. All Rights Reserved. 開発ビルド用のジョブ ● マルチ構成プロジェクトにして、1つのジョブで同時に複数ビル ドが実行できるようにしてる ● pipeline化したいけど、複数のジョブのコンソールログが1ヶ所 になって混ざってしまうので移行はしてない
  15. 15. Copyright Drecom Co., Ltd. All Rights Reserved. 開発ビルド用のジョブ 縦の軸はどのクラウドに対してプロビジョニングをするかどうか ● 対応するVagrantプラグインをインストールして ● vagrant up --provider=$PROVIDER みたいな感じで実行 $ P R O V I D E R
  16. 16. Copyright Drecom Co., Ltd. All Rights Reserved. 開発ビルド用のジョブ 横の軸は使用するnodeファイル(設定ファイル) ● リポジトリにコミットしてるのはdefault.yml(role全無し)だけだ が、ビルド時にrolesを全部付与したyml(role_all.yml)を生成 してビルドを実行することにより、role全有り、全無しを両方テ ストしてる $NODE
  17. 17. 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%は担保
  18. 18. Copyright Drecom Co., Ltd. All Rights Reserved. イメージビルド用のジョブ
  19. 19. Copyright Drecom Co., Ltd. All Rights Reserved. イメージビルド用のジョブ ● RUN_FLAG ● masterブランチからのwebhookを受けた時に実行されな いようにするためのフラグ ● チェックを入れて手動実行しないとイメージが作られないよ うにしてる(他に良いやり方あったら知りたい。。。)
  20. 20. Copyright Drecom Co., Ltd. All Rights Reserved. イメージビルド用のジョブ ● ACCOUNT ● 弊社だとサービス単位(費用が発生する請求単位)で AWSやIDCFのアカウントが複数分かれているので、作成 先のアカウントを選択できるようにしてる ● API実行のためのトークンが $JENKINS_HOME/accounts/ に保存されていて、アカウ ントファイル(プルダウンの名前)をスクリプト内で読み込ん でいる
  21. 21. Copyright Drecom Co., Ltd. All Rights Reserved. イメージビルド用のジョブ ● パラメータが多いけど、Rebuilder Pluginで一度使ったパラ メータを使いまわせるようにしてるので2回目以降はそんなに 大変ではない ○ https://wiki.jenkins-ci.org/display/JENKINS/Rebuild+Pl ugin ● イメージ作成に成功したらgitのtagを作り、かつイメージにも tagと同じ名前をつけることにより、イメージからどの時点の ソースコードを元にビルドしたかが特定できるようにしてる
  22. 22. Copyright Drecom Co., Ltd. All Rights Reserved. イメージビルド用のジョブ git tags AMI
  23. 23. Copyright Drecom Co., Ltd. All Rights Reserved. 最後に ● 複数のクラウドに対するインフラCIの事例はあまり見ないの で、参考になったら幸いです
  24. 24. 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マシンがいつ死んでもすぐに復旧できるようになってる

×