Upgrade to Pro — share decks privately, control downloads, hide ads and more …




Nulab Inc.

May 21, 2014


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

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

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

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

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

  6. 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/
  7. 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
  8. 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)
  9. 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
  10. “継続的デリバリ”  の⽴立立ち位置 http://www.atmarkit.co.jp/ait/articles/1312/03/news033.html

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

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

  13. ツールスタック n  Git  (  Backlog  ) n  Jenkins n  Gradle

    n  S3 n  Fabric n  (  Typetalk  +  Hubot  )
  14. デプロイフロー n  Git  でタグを付けて  push n  Webhook  で  Jenkins  に通知

    n  S3  にアップロードするジョブを実⾏行行 n  Fabric  で  S3  からダウンロードしてデプロイ
  15. Backlog  の  WebHook  設定

  16. tag  に反応する  Jenkins  の設定

  17. 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)   }  
  18. 三つのデリバリ環境 n  ステージング環境 n  プロダクション向けのテスト環境 n  プロダクションとは独⽴立立したデータベース n  ベータ環境 n 

    ヌーラボスタッフ向け、新機能の実験環境 n  プロダクションと同じデータベース n  プロダクション環境
  19. 三つのブランチ n  master n  プロダクション環境へのリリースブランチ n  develop n  プロダクション環境⽤用の開発ブランチ n 

    beta n  ベータ環境⽤用の開発ブランチ
  20. ステージング環境へのデリバリ n  develop  ブランチへの  push  後テストが通っ たら⾃自動デプロイ n  ⽤用途 n 

    本番向けのバグ修正などをすぐに確認 n  デリバリの⼿手間を極限まで下げる n  DB  マイグレートなどは⽬目をつぶる
  21. ベータ環境へのデリバリ n  beta  ブランチへのタグ付け後、チャットからデ プロイ n  ⽤用途 n  トライアルアンドエラーを迅速に回す n 

    デリバリの⼼心理理負担を下げる n  失敗したら、簡単にやり直せる
  22. プロダクション環境へのデリバリ n  master  ブランチへのタグ付け後、ローカルか ら  fabric  を実⾏行行 n  ELB  から切切り離離ししながらローリングリリース

    n  デリバリの⼼心理理負担はなるべく下げる n  途中経過をすぐに確認出来るように
  23. デモ

  24. 運⽤用上の⼯工夫 n  アプリケーションの設定は外部化 n  ビルドツールのプロファイル機能は使わない n  Jenkins  上にデプロイ環境を構築 n  ログが残る、環境問題が発⽣生しにくい

    n  リリース時の細かな配慮  (タイムアウト調整  )
  25. 実績 n  2⽉月からのプロダクションリリース回数 n  71回/4ヶ⽉月  (  17.75回/⽉月  ) n  4⽉月からのベータリリース回数

    n  22回/⽉月 n  平⽇日はほぼ毎⽇日どちらか(も)リリースしている n  リリースは  ”⽇日常的”  なこと
  26. 今後の課題 n  ローカルからの本番デプロイ n  環境差異異の問題 n  キリ戻しの時間 n  blue-‐‑‒green  的なアプローチ

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

    n  プロダクション以外にプロセスを洗練させる 場をもつこと