bambooによる継続的デリバリー
TRANSCRIPT
Bambooによる継続的デリバリー
2016/1/25
第17回 Tokyo Atlassian ユーザーグループ @Yahoo!Japan
グロースエクスパートナーズ(株)
大中 浩行
Copyright© 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.
サービスインした当時
• サーバーサイドのユニットテストは書いた
• フロントエンドのユニットテストはない
• リグレッションテストはスプリントごとに開発メンバ
ー総出で対応
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.
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.
プルリクエスト導入の顛末
リリース前に、オフショア担当部分のコードをレビュ
ーすることに
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による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.
計画メンテナンスから無停止リリースへ
お客様固有の事情として、デプロイした後、デプロイ
したサーバー上でシステムテストを行わなければ、サー
ビスインができない
一回のリリースで数時間サービス停止する事になる
サービスイン後、ユーザー数の増加や機能追加による
サービス停止の影響が拡大したことにより、サービス無
停止でのリリースを導入することに
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.
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.