Bambooによる継続的デリバリー
2016/1/25
第17回 Tokyo Atlassian ユーザーグループ @Yahoo!Japan
グロースエクスパートナーズ(株)
大中 浩行
Copyright© 2016 Growth xPartners, Inc. All rights reserved.
今日のテーマは「DevOps」
 何をしたらDevOpsなのか
1Copyright© 2016 Growth xPartners, Inc. All rights reserved.
1日に10回デプロイしたら?
2Copyright© 2016 Growth xPartners, Inc. All rights reserved.
http://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr
「DevOpsとは自動化だ!」
By NASA [Public domain], via Wikimedia Commons
https://en.wikipedia.org/wiki/Self-replicating_machine
「全てのサーバーにエラーが自動的に伝播するのがDevOps」
https://twitter.com/devops_borat/status/41587168870797312
Copyright 2015 Hiroyuki Ohnaka
「Devは順調、Opsは大火事」
By Kpahor (Own work) [CC BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0) or GFDL (http://www.gnu.org/copyleft/fdl.html)], via Wikimedia Commons
https://en.wikipedia.org/wiki/Detection_of_fire_accelerants
「DevはOpsの敵だ!」
By Amos Cassioli [Public domain], via Wikimedia Commons
https://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%8B%E3%83%A3%E3%83%BC%E3%83%8E%E3%81%AE%E6%88%A6%E3%81%84
「ええ敵です。我々は
SE部の人間を同僚と
認めていません。彼ら
は私達にとって仇敵で
あり災害であり、絶対
悪です。SE部さえい
なければこの世の争い
と貧困はほとんどなく
なるでしょう」
夏海公司「なれる!SE (2) 基礎から学ぶ?運用構築」
あなたどっちなの
「ワタシハTDDチョットデキル」
→「CIの構築お願いできますか」
→「デプロイの自動化したいんです」
→「インフラの自動化もお願いしたく」
→(イマココ)
8Copyright© 2016 Growth xPartners, Inc. All rights reserved.
よろしくお願いします
 大中浩行(Onaka,Hiroyuki)
 TDD Boot Camp (TDDBC)
 グロースエクスパートナーズ株式会社
アーキテクチャソリューション部
テクニカルリード
9Copyright© 2016 Growth xPartners, Inc. All rights reserved.
弊社について
 グロースエクスパートナーズ株式会社
(Growth xPartners Incorporated.)
 所在地 東京都新宿区西新宿
 受託開発を中心としたソフトウェア開
発企業(システムインテグレーター)
 http://www.gxp.co.jp/atlassian/
10Copyright© 2016 Growth xPartners, Inc. All rights reserved.
ケース
 大手通信事業者の法人向けサービス開発・運用
 開発プロセスはスクラム
 サービスインまでの開発期間7ヶ月
 サービスインしてから1年半経過
11Copyright© 2016 Growth xPartners, Inc. All rights reserved.
アーキテクチャー的な特徴
 クライアントMVC + サーバーサイドはJava
 Backbone.js + Spring MVC +
Spring Batch + Hibernate(JPA)
12Copyright© 2016 Growth xPartners, Inc. All rights reserved.
ツール選定
 情報共有:Confluence
 課題管理:JIRA Agile(JIRA Softwareに移行検証中)
 バージョン管理:Bitbucket Server
 CI:Bamboo
※いずれもオンプレミス
13Copyright© 2016 Growth xPartners, Inc. All rights reserved.
BambooによるCI
Copyright© 2016 Growth xPartners, Inc. All rights reserved. 14
2015/1/1
きっちりやる
 テスティング
 バージョン管理
15Copyright© 2016 Growth xPartners, Inc. All rights reserved.
テスティング
16Copyright© 2016 Growth xPartners, Inc. All rights reserved.
サービスインした当時
• サーバーサイドのユニットテストは書いた
• フロントエンドのユニットテストはない
• リグレッションテストはスプリントごとに開発メンバ
ー総出で対応
17Copyright© 2016 Growth xPartners, Inc. All rights reserved.
テストの整備
 Gebによるリグレッションテストの自動化
 フロントエンドのユニットテストの整備
 Developer TestingとQA Testingの役割分担
18Copyright© 2016 Growth xPartners, Inc. All rights reserved.
テストの規模感
 サーバーサイドの Javaプログラムは41,000行(LOC)
のプロダクトコードに対し、ユニットテスト5000件
 フロントエンド(Backbone.js/CoffeeScript)に対し
ては、ユニットテスト2700件
19Copyright© 2016 Growth xPartners, Inc. All rights reserved.
BambooによるCI
20Copyright© 2016 Growth xPartners, Inc. All rights reserved.
21Copyright© 2015 Growth xPartners, Inc. All rights reserved.
22Copyright© 2016Growth xPartners, Inc. All rights reserved.
プランブランチによるブランチ毎のビルドの独立
23Copyright© 2015 Growth xPartners, Inc. All rights reserved.
Bambooによるブランチ検出
24Copyright© 2015 Growth xPartners, Inc. All rights reserved.
Git-flowによるブランチ管理モデル
25Copyright© 2016 Growth xPartners, Inc. All rights reserved.
MATT SHELTON, 「Creative Branching Models for Multiple Release Streams 」
http://de.slideshare.net/GoAtlassian/creative-branching-models-for-multiple-release-streams/19
継続的統合システム(※)によるビルドフロー
26Copyright© 2016 Growth xPartners, Inc. All rights reserved.
develop
ドメインロジック
APIサーバー
共通ライブラリー ビルド
ビルド
ビルド
feature/A
ビルド
ビルド
ビルド
feature/B
ビルド
ビルド
ビルド
1.0.0-SNAPSHOT 1.0.0-A-SNAPSHOT 1.0.0-B-SNAPSHOTバージョニング
※「テストから見えてくるグーグルのソフトウェア開発」から
 ブランチ管理はgit-glowベースですが、デプロイする
デフォルトのブランチをBambooで設定する都合上、
releaseブランチの扱いについてはカスタマイズしまし
た
(オリジナル) release/1.00, release/2.00 ...
(カスタマイズ) “release”ブランチで固定
27Copyright© 2016 Growth xPartners, Inc. All rights reserved.
featureブランチ乱立問題
 feature/XxxというブランチをBambooが検出してCI
でビルドする運用としたところ、「CIの対象にしたい場
合はfeatureブランチにする」という文化が発生
 feature/PJ-XXX (JIRAのチケット番号)とか
 featureとはなんだったのか...
 featureブランチがたくさん出来る以外は実害がない
ため、今のところ静観
28Copyright© 2016 Growth xPartners, Inc. All rights reserved.
Bamboo+Gebによる継続的システムテスト
 Geb ... Page Objectパターンを使った、Selenium拡
張。テストシナリオをGroovyで記述するのが特徴。
 Geb+Spock(BDDフレームワーク)で 、ユーザースト
ーリーを網羅する形式でのシステムテスト自動化を実現
 Windows Server(VM)上でのBambooリモートエー
ジェント上でテストを実行することで、実ユーザーの環
境に近い形でend to endのテストを実行
29Copyright© 2016 Growth xPartners, Inc. All rights reserved.
BambooとBitbucketの連携
 BambooとBitbucket Server間でアプリケーションリ
ンクを設定することにより、ソースコードをpushした
際にBambooのビルドをトリガーできます。
30Copyright© 2016 Growth xPartners, Inc. All rights reserved.
Bitbucket上のプルリクエストによるコードレビュー
31Copyright© 2016 Growth xPartners, Inc. All rights reserved.
プルリクエスト導入の顛末
 リリース前に、オフショア担当部分のコードをレビュ
ーすることに
 Confluenceに逐次「Xyz.javaのAbcメソッドの○○
行目のところが…」(※実際は英語)
 漂う厭戦気分
 「プルリクエストっていう便利なものがあるんだけど
なー(チラッチラッ)」
32Copyright© 2016 Growth xPartners, Inc. All rights reserved.
BambooによるCIの効果
 品質を担保しながらの反復型開発の実現
 テストでリグレッションがないことを担保しながら
の内部構造の改善(リファクタリング)
 自動テストによって基本的な品質が確保されている
事による、QAチームによる受入テストの生産性向上
33Copyright© 2016 Growth xPartners, Inc. All rights reserved.
Bitbucketによるバージョン管理のメリット
 プルリクエスト形式でのレビューによる品質向上、情
報共有
 コードの共同所有
 「このコードは○○さんが担当だから」というのがない
 ブランチ管理による効率アップ
 複数の機能追加を並行で進める
 リリースの準備作業と並行で次回リリースの新機能の開発を
進める
34Copyright© 2016 Growth xPartners, Inc. All rights reserved.
Bambooによる継続的デリバリー
Copyright© 2016 Growth xPartners, Inc. All rights reserved. 35
2015/1/1
Bambooによる自動デプロイ
36Copyright© 2016 Growth xPartners, Inc. All rights reserved.
BambooによるDeployフロー
37Copyright© 2016 Growth xPartners, Inc. All rights reserved.
Build Project Deployment `Project
ビルド
ビルド
ビルド
Artifact Release
デプロイ
デプロイ
Bambooによるリリース作業の自動化
 CIによるビルドをパスして、ステージング環境で正
常性確認済みのリリースをワンクリックでデプロイ。
 Bambooから任意ブランチの任意ビルドがデプロイ可
能
38Copyright© 2016 Growth xPartners, Inc. All rights reserved.
以下の作業を自動化
 アプリケーションのデプロイ、 アプリケーションサ
ーバーの再起動
 データベースの最新化
 デプロイ後のスモークテスト
 サービスイン前の最終システムテスト
 ロードバランサーの閉塞、リリース時のZabbix監視
解除などのインフラ作業
39Copyright© 2016 Growth xPartners, Inc. All rights reserved.
Bambooによる自動デプロイのTips
 デプロイする処理のスクリプトは「Script Task」「
SSH Task」の中には直接書かずに、スクリプトファイ
ルの中に括り出す
40Copyright© 2016 Growth xPartners, Inc. All rights reserved.
設定ファイルの中身等、デプロイ先によって変わる部
分は、Bambooから${bamboo.deploy.environment}
というパラメーターが渡ってくるので、そのパラメータ
と設定ファイルのパス等を付き合わせる
(Variables for deployment environment:
https://confluence.atlassian.com/bamboo/variables-for-deployment-environments-342754180.html)
41Copyright© 2016 Growth xPartners, Inc. All rights reserved.
JIRA上での成果物のトレーサビリティー
42Copyright© 2016 Growth xPartners, Inc. All rights reserved.
計画メンテナンスから無停止リリースへ
 お客様固有の事情として、デプロイした後、デプロイ
したサーバー上でシステムテストを行わなければ、サー
ビスインができない
 一回のリリースで数時間サービス停止する事になる
 サービスイン後、ユーザー数の増加や機能追加による
サービス停止の影響が拡大したことにより、サービス無
停止でのリリースを導入することに
Copyright© 2016 Growth xPartners, Inc. All rights reserved.
Blue-green Deployment
44Copyright© 2015 Growth xPartners, Inc. All rights reserved.
By KSEltar (Own work) [CC BY-SA 3.0 (http://creativecommons.org/licenses/by-
sa/3.0) or GFDL (http://www.gnu.org/copyleft/fdl.html)], via Wikimedia Commons
アクセス ロードバランサー
②ロードバランサー切替
①デプロイ
Blue Server
Green Server
Blue Server
45Copyright© 2015 Growth xPartners, Inc. All rights reserved.
By KSEltar (Own work) [CC BY-SA 3.0 (http://creativecommons.org/licenses/by-
sa/3.0) or GFDL (http://www.gnu.org/copyleft/fdl.html)], via Wikimedia Commons
Green Server
Blue Server
データ連携
サーバー
Blue Server
Green Server
データベース
サーバー
振り分け?
非同期処理の扱いの問題
ユーザーの
リクエスト
テストの
リクエスト
 blueサーバーとgreenサーバーどちらがサービスイン
しているサーバーかの状態を持たせる
(切替はBambooから操作する)
 O/Rマッパー(Hibernate)上の処理にinterceptorを適
用して、上記の状態を参照して、データベース上に投入
するレコードにサービスインしているサーバーが投入し
ているレコードなのかシステムテストで投入したレコー
ドなのかが区別がつくようにする
46Copyright© 2015 Growth xPartners, Inc. All rights reserved.
TIPS: 対向サーバーのDNS切替に追従する
• サイト切替時にシステム連携先のDNS先レコードが
切り替わるため、DNSの変更に追従できるように
アプリケーションサーバー(Java)のJVM起動オプショ
ンに
「-Dsun.net.inetaddr.ttl=0 -
Dsun.net.inetaddr.negative.ttl=1」
を設定
Copyright© 2016 Growth xPartners, Inc. All rights reserved.
まとめ
Copyright© 2016 Growth xPartners, Inc. All rights reserved. 48
2015/1/1
Opsってどうなの
• 敵対しているわけではない
• システムを安定して稼働させるという責任感の高さ
• インフラ基盤の最終的な正しさはアプリケーションを
通じてからでないとわからない。
• OpsはDevが協力してくれることを望んでいる
Copyright© 2016 Growth xPartners, Inc. All rights reserved.
DevOpsとは
 自動化そのものでもなく
 ツール導入でもなく
 スムーズなデリバリーのために、チームができること
を一つ一つ増やしていくこと
 組織のagilityを高めるために、フィードバックサイク
ルを回せるようにすること
50Copyright© 2016 Growth xPartners, Inc. All rights reserved.
ありがとうございました!
 大中浩行(Onaka,Hiroyuki)
 グロースエクスパートナーズ株式会社
アーキテクチャソリューション部
テクニカルリード
 http://www.gxp.co.jp/atlassian/index.html
 @setoazusa
51Copyright© 2015 Growth xPartners, Inc. All rights reserved.

Bambooによる継続的デリバリー