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 Herokuflow example
Search
Yusuke Kano
November 18, 2019
Technology
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.6k
Other Decks in Technology
See All in Technology
ワールドカフェI /チューターを改良する / World Café I and Improving the Tutors
ks91
PRO
0
120
AOAI をきっかけに 社内の Azure 管理を見直した話
recruitengineers
PRO
1
280
チームでロジカルシンキングに改めて向き合っている話 〜学習環境と実践⽅法〜
sansantech
PRO
2
2.3k
20240418_Google ColabにLLMが搭載されたようなのでPython x データ分析の勉強方法を考えてみる
doradora09
0
130
Next'24 事例セッションの紹介とクラウド資格を活用したキャリア形成について語りMuscle
yasumuusan
1
440
サーバー間 GraphQL と webmock-graphql の話 / server-to-server graphql and webmock-graphql
qsona
2
190
よく聞くけど使ったことないソフトウェアNo.1 KafkaとSnowflake
foursue
4
350
オーナーシップを持つ領域を明確にする
konifar
13
3.1k
Yahoo! 知恵袋フロントエンドをリアーキテクトしている話
lycorptech_jp
PRO
1
120
コンテナセキュリティの基本と脅威への対策
kyohmizu
3
760
[新卒向け研修資料] テスト文字列に「うんこ」と入れるな(2024年版)
infiniteloop_inc
4
13k
アクセス制御にまつわる改善 / Improving access control
itkq
0
530
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
16
3.9k
The Straight Up "How To Draw Better" Workshop
denniskardys
227
130k
YesSQL, Process and Tooling at Scale
rocio
164
13k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
21
1.6k
A Philosophy of Restraint
colly
197
16k
RailsConf 2023
tenderlove
4
540
A better future with KSS
kneath
231
16k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
221
21k
Scaling GitHub
holman
457
140k
BBQ
matthewcrist
80
8.8k
[RailsConf 2023] Rails as a piece of cake
palkan
23
3.9k
Rebuilding a faster, lazier Slack
samanthasiow
73
8.2k
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