Slide 1

Slide 1 text

継続的デリバリー(Continuous  Delivery)のお話を聞いてみよう ヌーラボにおける継続的デリバリ Wednesday,  May  21th  2014 SOMEDA  Takashi

Slide 2

Slide 2 text

https://twitter.com/tksmd テックエバンジェリスト ⾃自⼰己紹介 https://facebook.com/takashi.someda JAWS-‐‑‒UG  京都・関Java  など https://github.com/tksmd 染⽥田  貴志   SOMEDA  Takashi

Slide 3

Slide 3 text

http://tatsu-‐‑‒zine.com/books/genba10things

Slide 4

Slide 4 text

http://nulab-‐‑‒inc.com/ja/blog/nulab/devlove-‐‑‒genba10things/

Slide 5

Slide 5 text

http://nulab-‐‑‒inc.com/blog/nulab/generating-‐‑‒value-‐‑‒for-‐‑‒users/

Slide 6

Slide 6 text

Backlog  is  a  project  management  tool  that  2,300  clients  use. In  addition  to  issue  management  feature,  Backlog  provides •  File  sharing  by  WebDAV •  Git  and  Subversion  repository  hosting. Visit  http://www.backlog.jp/

Slide 7

Slide 7 text

1,200,000  users  around  the  world  draw  wireframes,  network   diagrams,  UML,  business  plans  and  so  on. Cacoo  provides  basic  functionality  as  a  draw  tool  and  powerful  collaborative   features  like •  Simultaneous  Editing  on  same  diagram  by  multiple  users •  Integration  with  Google  Services  like  Google  Apps,  Google  Drive  and   Google+  Hangouts

Slide 8

Slide 8 text

A  new  collaborative  chat  app  has  just  been  out  of  beta  this  year!! •  Revolutionize  your  team  discussion •  Integration  with  nulabʼ’s  other  services •  Provide  easy-‐‑‒to-‐‑‒use  API  for  developers  (http://developers.typetalk.in)

Slide 9

Slide 9 text

Single  sign-‐‑‒on  service  for  our  all  services. •  Application  launcher  of  our  each  services  called  launchbox •  Integrate  with  multiple  spaces  of  Backlog •  One  profile  shared  with  multiple  services

Slide 10

Slide 10 text

“継続的デリバリ”  の⽴立立ち位置 http://www.atmarkit.co.jp/ait/articles/1312/03/news033.html

Slide 11

Slide 11 text

デリバリプロセスの全体像

Slide 12

Slide 12 text

インフラ側はこちらで❤ http://weekendlancers.doorkeeper.jp/events/11216

Slide 13

Slide 13 text

ツールスタック n  Git  (  Backlog  ) n  Jenkins n  Gradle n  S3 n  Fabric n  (  Typetalk  +  Hubot  )

Slide 14

Slide 14 text

デプロイフロー n  Git  でタグを付けて  push n  Webhook  で  Jenkins  に通知 n  S3  にアップロードするジョブを実⾏行行 n  Fabric  で  S3  からダウンロードしてデプロイ

Slide 15

Slide 15 text

Backlog  の  WebHook  設定

Slide 16

Slide 16 text

tag  に反応する  Jenkins  の設定

Slide 17

Slide 17 text

Gradle  のタスク task  uploadWarAndStaticFileToS3(dependsOn:  war)  <<  {          //  ./gradlew  uploadWarAndStaticFileToS3  -­‐Penv=dev  -­‐Ptag=R20140206          Util.needParams(project,  "env",  "tag")          if(!env.equals("prod")  &&  !env.equals("dev")){                  throw  new  InvalidUserDataException("  env  needs  [prod]  or  [dev].")          }          //  js,css,png  etc..  to  S3  for  cloudfront          def  s3  =  new  AwsS3(bucketName:  "cdn",  project:project)          s3.uploadStaticFiles(war.archivePath,  tag)            s3  =  new  AwsS3(bucketName:"app",  project:project)          //  war,  cloudfront.rc  to  S3          s3.uploadWarCloudfrontRcFile(war.archivePath,  env,  tag)   }  

Slide 18

Slide 18 text

三つのデリバリ環境 n  ステージング環境 n  プロダクション向けのテスト環境 n  プロダクションとは独⽴立立したデータベース n  ベータ環境 n  ヌーラボスタッフ向け、新機能の実験環境 n  プロダクションと同じデータベース n  プロダクション環境

Slide 19

Slide 19 text

三つのブランチ n  master n  プロダクション環境へのリリースブランチ n  develop n  プロダクション環境⽤用の開発ブランチ n  beta n  ベータ環境⽤用の開発ブランチ

Slide 20

Slide 20 text

ステージング環境へのデリバリ n  develop  ブランチへの  push  後テストが通っ たら⾃自動デプロイ n  ⽤用途 n  本番向けのバグ修正などをすぐに確認 n  デリバリの⼿手間を極限まで下げる n  DB  マイグレートなどは⽬目をつぶる

Slide 21

Slide 21 text

ベータ環境へのデリバリ n  beta  ブランチへのタグ付け後、チャットからデ プロイ n  ⽤用途 n  トライアルアンドエラーを迅速に回す n  デリバリの⼼心理理負担を下げる n  失敗したら、簡単にやり直せる

Slide 22

Slide 22 text

プロダクション環境へのデリバリ n  master  ブランチへのタグ付け後、ローカルか ら  fabric  を実⾏行行 n  ELB  から切切り離離ししながらローリングリリース n  デリバリの⼼心理理負担はなるべく下げる n  途中経過をすぐに確認出来るように

Slide 23

Slide 23 text

デモ

Slide 24

Slide 24 text

運⽤用上の⼯工夫 n  アプリケーションの設定は外部化 n  ビルドツールのプロファイル機能は使わない n  Jenkins  上にデプロイ環境を構築 n  ログが残る、環境問題が発⽣生しにくい n  リリース時の細かな配慮  (タイムアウト調整  )

Slide 25

Slide 25 text

実績 n  2⽉月からのプロダクションリリース回数 n  71回/4ヶ⽉月  (  17.75回/⽉月  ) n  4⽉月からのベータリリース回数 n  22回/⽉月 n  平⽇日はほぼ毎⽇日どちらか(も)リリースしている n  リリースは  ”⽇日常的”  なこと

Slide 26

Slide 26 text

今後の課題 n  ローカルからの本番デプロイ n  環境差異異の問題 n  キリ戻しの時間 n  blue-‐‑‒green  的なアプローチ

Slide 27

Slide 27 text

最後に n  継続的デリバリは積み上げのプロセス n  プロセスの洗練度度と失敗時のリスクのバラン スを⾒見見極めながら⾃自動化する領領域を定める n  ⼼心理理的な負担を⾒見見極める n  デリバリ環境を複数もつことはおススメ n  プロダクション以外にプロセスを洗練させる 場をもつこと