Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
継続的デリバリーを実現するためのデプロイフローを考える / tambourine Heroku...
Search
Yusuke Kano
November 18, 2019
Technology
1
1.1k
継続的デリバリーを実現するためのデプロイフローを考える / tambourine Herokuflow example
2019/11/18のDevLOVE関西で話した時の資料です
https://devlove-kansai.doorkeeper.jp/events/99164
Yusuke Kano
November 18, 2019
Tweet
Share
More Decks by Yusuke Kano
See All by Yusuke Kano
LaravelxHerokuによる開発・運用 / laravel_heroku_the_12_factor_app
kusk
1
1.8k
Other Decks in Technology
See All in Technology
Model Mondays S2E02: Model Context Protocol
nitya
0
120
“プロダクトを好きになれるか“も QAエンジニア転職の大事な判断基準だと思ったの
tomodakengo
1
220
マルチテナント+マルチプロダクト SaaS への AI Agent の組み込み方
kworkdev
PRO
2
390
米国国防総省のDevSecOpsライフサイクルをAWSのセキュリティサービスとOSSで実現
syoshie
0
200
從四件事帶你見識見識 事件驅動架構設計 (EDA)
line_developers_tw
PRO
0
510
堅牢な認証基盤の実現 TypeScriptで代数的データ型を活用する
kakehashi
PRO
2
240
OpenTelemetry Collector internals
ymotongpoo
5
560
QAはソフトウェアエンジニアリングを学んで実践するのが大事なの
ymty
1
490
Devin(Deep) Wiki/Searchの活用で変わる開発の世界観/devin-wiki-search-impact
tomoki10
0
720
「どこにある?」の解決。生成AI(RAG)で効率化するガバメントクラウド運用
toru_kubota
2
450
成立するElixirの再束縛(再代入)可という選択
kubell_hr
0
480
キャディでのApache Iceberg, Trino採用事例 -Apache Iceberg and Trino Usecase in CADDi--
caddi_eng
0
160
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1370
200k
Rebuilding a faster, lazier Slack
samanthasiow
81
9k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Raft: Consensus for Rubyists
vanstee
140
7k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.3k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
A designer walks into a library…
pauljervisheath
206
24k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.4k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Transcript
継続的デリバリーを実現するための デプロイフローを考える . . DevLOVE関⻄ 受託開発の現場でのアジャイルへの取り組み
アジェンダ • ⾃⼰紹介 • 会社紹介 • 必要なこと • Herokuとは? •
タンバリンでの運⽤ • まとめ
⾃⼰紹介 • 狩野 裕介 / Kano Yusuke • @usk •
株式会社タンバリン • CTO New! • クラウドインテグレーション部 ⼤阪開発チーム マネージャー • 経歴 • Flasher • バックエンドエンジニア
IUUQTOPUFNVOOBBBE
マネージャーとして • on (隔週30分〜1時間) • V MOM(Salesforceのフレームワーク) • チームもやもやボード •
チームのふりかえり • チームみんなで採⽤プロセスにコミット • 社内ポッドキャスト
会社紹介
タンバリン(tambourine.inc)は、パートナー型デジタルプロダクション株式会社TAM の⼦会社として2015 年9⽉設⽴。SalesforceやHeroku等のクラウドサービスを活⽤し たモバイルアプリ‧Eコマース‧ウェブサー ビスの開発を中⼼におこなっています。 ΫϥΠΞϯτͷʮσδλϧγϑτʯΛαϙʔτɻ ࢲͨͪح৺Λثʹɺ͋ͨΒ͍͜͠ͱ͕େ͖ͳؒͨͪͱ ʮੈքΛม͑ΔΞΠσΞʯΛΧλνʹ͢ΔςΫϊϩδετूஂͰ͢ɻ
エンジニア絶賛募集中です!! IUUQTXXXXBOUFEMZDPNDPNQBOJFTUBNCPVSJOFJOD
本題
必要なこと
アジャイルのフロー ཁ݅ఆٛʙઃܭʙ ։ൃʙςετ ˠϦϦʔε ཁ݅ఆٛʙઃܭʙ ։ൃʙςετ ˠϦϦʔε ཁ݅ఆٛʙઃܭʙ ։ൃʙςετ ˠϦϦʔε
ཁ݅ఆٛʙઃܭʙ ։ൃʙςετ ˠϦϦʔε
スクラムのスプリント
インクリメント • 完成した、動くもの • スプリント終了時の成果 • リリースできる状態になっている
IUUQTTQFBLFSEFDLDPNUXBEBRVBMJUZBOETQFFE
IUUQTTQFBLFSEFDLDPNUXBEBRVBMJUZBOETQFFE TMJEF
必要なこと • アジャイルでは確認できるものを素早く提供する必要がある • 質を上げ、スピードを上げる仕組みを作る必要がある λϯόϦϯͰ)FSPLVͰ࣮ݱ
None
Herokuとは? • アプリの構築、提供、監視、スケールに役⽴つ クラウドプラットフォーム • 安全性とスケーラビリティに優れた DaaS (サービスとしてのデータ ベース) •
The Twelve-Factor Appを提唱し、それに考慮して作られている IUUQTKQIFSPLVDPNXIBU
5XFMWF'BDUPS"QQɺ࣍ͷΑ͏ͳ4PGUXBSFBTB4FSWJDFΛ࡞Γ্͛ΔͨΊͷํ๏Ͱ͋Δɻ • セットアップ⾃動化のために 宣⾔的な フォーマットを使い、プロジェクトに新しく加わった開発者が要する時間とコスト を最⼩化する。 • 下層のOSへの 依存関係を明確化 し、実⾏環境間での
移植性を最⼤化 する。 • モダンな クラウドプラットフォーム 上への デプロイ に適しており、サーバー管理やシステム管理を不要なものにする。 • 開発環境と本番環境の 差異を最⼩限 にし、アジリティを最⼤化する 継続的デプロイ を可能にする。 • ツール、アーキテクチャ、開発プラクティスを⼤幅に変更することなく スケールアップ できる。 IUUQTGBDUPSOFUKB
The Twelve-Factor App 1.コードベース (Codebase) 2.依存関係 (Dependencies) 3.設定 (Config) 4.バックエンドサービス
(Backing Services) 5.ビルド、リリース、ラン(Build, release, run) 6.プロセス (Processes) 7.ポートバインディング (Port binding) 8.並⾏性 (Concurrency) 9.廃棄容易性 (Disposability) 10.開発/本番⼀致 (Dev/prod parity) 11.ログ (Logs) 12.管理プロセス (Admin processes)
The Twelve-Factor App 1.コードベース (Codebase) 2.依存関係 (Dependencies) 3.設定 (Config) 4.バックエンドサービス
(Backing Services) 5.ビルド、リリース、ラン(Build, release, run) 6.プロセス (Processes) 7.ポートバインディング (Port binding) 8.並⾏性 (Concurrency) 9.廃棄容易性 (Disposability) 10.開発/本番⼀致 (Dev/prod parity) 11.ログ (Logs) 12.管理プロセス (Admin processes)
Heroku Flow
Heroku Flow • Heroku Pipeline • GitHub Integration • Heroku
CI • Review Apps • Heroku ChatOps IUUQTKQIFSPLVDPNDPOUJOVPVTEFMJWFSZ
Heroku Pipeline 同じコードベースを共有する Heroku アプリケーションを 1 つにまとめたデプロイパイプライン IUUQTEFWDFOUFSIFSPLVDPNBSUJDMFTQJQFMJOFT
GitHub Integration • リポジトリと連携させ、ブランチ単位でデプロイが可能 (⾃動‧⼿動) • GitHubからHerokuアプリを直接開いたり IUUQTEFWDFOUFSIFSPLVDPNBSUJDMFTHJUIVCJOUFHSBUJPO
Continuous Integration (CI) • GitHubとの連携があるため、GitHub側のCIが利⽤可能 • GitHub Actions、Circle CI、Travis CI
• Heroku CI • 料⾦体系が複雑で試⾏錯誤中 IUUQTKQIFSPLVDPNDPOUJOVPVTJOUFHSBUJPO
Review Apps • ⼀時的に確認⽤として⽴ち上げておけるアプリ • (基本的に)GitHubのプルリクエストごとに作成する • 最近新しくなり、プルリクなしで作成できるようになった IUUQTEFWDFOUFSIFSPLVDPNBSUJDMFTSFWJFXBQQTOFX
タンバリンでの運⽤例
λϯόϦϯͰͷӡ༻ྫ )FSPLV1JQFMJOF
λϯόϦϯͰͷӡ༻ྫ ΞϓϦͷ༻్
λϯόϦϯͰͷӡ༻ྫ ΞϓϦͷ༻్
λϯόϦϯͰͷӡ༻ྫ ΞϓϦͷ༻్
λϯόϦϯͰͷӡ༻ྫ (JU)VC࿈ܞ
λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕ ։ൃ ʢྫɿGFBUVSFBEE@CVUUPOʣ QVTI OFYUSFMFBTFϒϥϯνʹ ϓϧϦΫΤετΛग़͢ )FSPLVͷϨϏϡʔΞϓϦ͕ ࡞ΒΕΔ ࣗಈςετ
ʢ6OJUςετʣ
λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕɿϨϏϡʔΞϓϦ
λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕɿϨϏϡʔΞϓϦ
λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕɿ֬ೝɾςετ 確認‧テスト • ⾃動テスト • コードレビュー • 動作確認
λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕɿ֬ೝɾςετ
λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕɿϚʔδ ֬ೝޙɺϚʔδ͢Δ
λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕɿϚʔδ w Ϛʔδ͞ΕΔͱOFYUSFMFBTF͕ ࣗಈ%FQMPZ͞ΕΔ w ϨϏϡʔΞϓϦࣗಈͰআ͞ΕΔ
λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕɿ֬ೝ リリース準備 • 開発が完了したものは next-release に • 動作確認 •
OKなら本番にリリース • Heroku上でロールバックも可能 • next-releaseは基本常にリリース可能な状態にしておく → インクリメント
λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕɿϦϦʔε 1SPNPUFϘλϯΛԡ͚ͩ͢ 本番リリース
λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕɿϦϦʔε
λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕɿϦϦʔεޙ NBTUFSϒϥϯνऔΓࠐΈ όάमਖ਼ͳͲͷϦϦʔεʹඋ͑Δ
タンバリンでの運⽤例 . チケット⽤のブランチを作り、GitHubにpush • next-release にプルリクを出す . 確認 • GitHubでCI‧コードレビュー
• Herokuのレビューアプリで動作確認 . next-release にマージ . 全ての対応が完了後、動作確認 . リリース • hotfix⽤にmasterブランチに取り込み
まとめ
まとめ • スプリントの最後にはリリース可能な状態にする • → パイプラインを使ってのフロー管理 • 質とスピードをあげる • →
CIの導⼊で質の確保 • → デプロイなどの環境周りを⾃動化
IUUQTKQIFSPLVDPNQPEDBTUTDPEFJTIKQ