$30 off During Our Annual Pro Sale. View Details »

ヌーラボにおける継続的デリバリ

 ヌーラボにおける継続的デリバリ

Nulab Inc.
PRO

May 21, 2014
Tweet

More Decks by Nulab Inc.

Other Decks in Technology

Transcript

  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  プロダクション以外にプロセスを洗練させる 場をもつこと