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

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

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

More Decks by 株式会社ヌーラボ

Other Decks in Technology

Transcript

  1. 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/
  2. 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
  3. 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)
  4. 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
  5. ツールスタック n  Git  (  Backlog  ) n  Jenkins n  Gradle

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

    n  S3  にアップロードするジョブを実⾏行行 n  Fabric  で  S3  からダウンロードしてデプロイ
  7. 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)   }  
  8. 三つのデリバリ環境 n  ステージング環境 n  プロダクション向けのテスト環境 n  プロダクションとは独⽴立立したデータベース n  ベータ環境 n 

    ヌーラボスタッフ向け、新機能の実験環境 n  プロダクションと同じデータベース n  プロダクション環境
  9. ステージング環境へのデリバリ n  develop  ブランチへの  push  後テストが通っ たら⾃自動デプロイ n  ⽤用途 n 

    本番向けのバグ修正などをすぐに確認 n  デリバリの⼿手間を極限まで下げる n  DB  マイグレートなどは⽬目をつぶる
  10. 実績 n  2⽉月からのプロダクションリリース回数 n  71回/4ヶ⽉月  (  17.75回/⽉月  ) n  4⽉月からのベータリリース回数

    n  22回/⽉月 n  平⽇日はほぼ毎⽇日どちらか(も)リリースしている n  リリースは  ”⽇日常的”  なこと