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

52
Bambooによる継続的デリバリー 2016/1/25 第17回 Tokyo Atlassian ユーザーグループ @Yahoo!Japan グロースエクスパートナーズ(株) 大中 浩行 Copyright© 2016 Growth xPartners, Inc. All rights reserved.

Upload: growth-xpartners-incorporated

Post on 11-Jan-2017

1.632 views

Category:

Business


0 download

TRANSCRIPT

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.