Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

【ヒカ☆ラボ】 dely株式会社 梅森 翔氏 登壇資料 20171121

1 449 vues

Publié le

世界最大のレシピ動画アプリ『クラシル』開発のすべて!! ~dely開発チームのCTO、サーバーサイド、アプリ、UI/UX、SREのリーダー5名が登壇し、急成長中プロダクトのグロースノウハウについてお話します~

Publié dans : Ingénierie
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

【ヒカ☆ラボ】 dely株式会社 梅森 翔氏 登壇資料 20171121

  1. 1. GitHub+Code Pipeline+Code Buildで つらくないリリースサイクルを回す dely株式会社 梅森 翔
  2. 2. 軽く自己紹介 delyのAndroidエンジニアです 今は一人でやってます (来年入社予定が一人) (絶賛Androidエンジニア募集中です) 来年のDroidKaigiで登壇します 『Dagger2を活用してAndroid SDKの依存関係をク リーンにする』
  3. 3. 今日の話 kurashiru android版の話です androidのコードの話はないです
  4. 4. 5月からのリリース回数: およそ60回 おおよそ3~4日に1回の頻度 若干リリースしすぎ(たまにレビューで怒られる)
  5. 5. リリース頻度が高いことによるつらさ 単純に面倒でつらい どのAPKがリリースされてるか分からなくなって つらい キーストアの管理問題でつらい いちいちタグを切るのもつらい つらい => 自動化しましょう
  6. 6. 構成図
  7. 7. AWS CodePipeline Amazon S3 AWS CodeCommit GitHub への変更(Push)を検知したら AWS CodeBuild Jenkinsプラグイン Solano CI(詳しくないです) をキック(deploy周りは使ってないです)
  8. 8. AWS CodePipeline シンプル 現在はブランチ単位での指定だけ その他CIサービス程充実していない(フィーチャ ーブランチのテストとかはCodePipelineだと現状 無理) ちょっと機能不足感
  9. 9. AWS CodeBuild 任意のDockerイメージを使ってビルドできる 任意のバージョンのAndroid SDKを予めインス トールしたイメージでビルドできる アプリの依存ライブラリ(jar, war)が既に含ま れたイメージでビルドできる 現在はECRでイメージ管理してます Dockerイメージ自体のビルドもできる(プリセッ トのビルド環境を選択する)
  10. 10. AWS CodeBuild 結構ハイスペック build.general1.small 2vCPU, 3GB mem build.general1.medium 4vCPU, 7GB mem build.general1.large 8vCPU, 15GB mem Androidのビルドに向いてる(使えるメモリが多い のがうれしい)
  11. 11. AWS CodeBuild 使った分だけ課金 build.general1.small 0.005 USD/min build.general1.medium 0.010 USD/min build.general1.large 0.020 USD/min 現在はbuild.general1.largeで1回のビルドが大体10 分くらいなので1回0.2ドル、結構お手軽
  12. 12. buildspec.yml phases: install: commands: - echo do nothing. pre_build: commands: - echo do nothing. build: commands: - aws s3 cp XXX app/${ANDROID_KEYSTORE_NAME} - | if [ $CODEBUILD_INITIATOR != "codepipeline/android chmod +x ./gradlew && ./gradlew assembleCheck -Pdebug.server_url=XXX -Pdebug.web_content_url=XXX
  13. 13. bulidspec.yml リポジトリ直下に入れておく(他CIサービスと同 じ) 設定は環境変数で渡す(CodeBuildのプロジェクト に設定する) CodePipelineを使った場合はどのCodePipelineの プロジェクトからキックされたかの情報が環境変 数経由で渡ってくるのでそれを使う
  14. 14. CodeBuildでやっていること APKのビルド キーストアでの署名(s3に置いておいたのをダウ ンロードしてます) Slackへの通知(+APKアップロード) GitHubのReleaseページ生成 ユニットテストは現状はWerckerで回してます
  15. 15. Releaseページの生成
  16. 16. Releaseページの生成 {version_name}-{version_code} でページ生成 前バージョンとのdiffへのリンク https://{repo}/compare/vX.X.X-XXX... {commithash} GitHub APIとかでコミットメッセージとかを抽 出してみたりしたが結局これが確実&一番見や すかった 署名済みAPK Proguardのmapping.txt
  17. 17. Releaseページの生成
  18. 18. Releaseページの生成手順(概要) https://api.github.com/repos/{repo}/git/refs を叩いてコミットhashにタグを追加 https://api.github.com/repos/{repo}/releases を叩いてリリースページを作成(タグ、名前、diff へのリンク) https://api.github.com/repos/{repo}/releases/tags/ からアップロード用URLを取得 APK, mapping.txtをアップロード 今はシェルスクリプトでやってます (buildspec.yml直書き)
  19. 19. Releaseページの生成 待ってればAPK上がってくるのはやっぱり便利 (特にSplit APKを使っている場合は) APKが確実に同じやり方で生成されていることが 確信出来てGood 任意のバージョン間のdiffが1クリックで見られる のはやっぱり便利(不具合調査とか) 過去バージョンからのマイグレーションのテスト とか楽(Google Playのアーティファクトライブラ リから取ってくれば出来るけど)
  20. 20. 現在の課題 テストは今のところはWercker任せなのでそのう ちCodeBuildに移行したい CodeBuildのキックはお手軽なのでCodePipelineで やっているだけなのでいずれはもっと高機能なも のに移行したい 前バージョンのdiffは現在の形が楽だけどちゃんと 文章も作った方がいいかも(でもやるなら楽にや りたい) リリース作業自体は手動(APKアップロードまで はそこまで面倒じゃないのとやり直すこともある ので自動化する必要が無いかも)

×