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
release-please で実現する手軽で不変な Docker イメージタグ付け方法
Search
chanyou0311
June 28, 2024
Technology
0
92
release-please で実現する手軽で不変な Docker イメージタグ付け方法
おもにクラウドの話してます - 広島 #2 の発表資料です。
https://omoni-cloud.connpass.com/event/320415/
chanyou0311
June 28, 2024
Tweet
Share
More Decks by chanyou0311
See All by chanyou0311
データ基盤を支える技術
chanyou0311
6
3.6k
おうちk8s入門 - すごい広島 IT初心者の会 [84]
chanyou0311
1
150
オンラインコミュニケーションの課題と、その乗り越え方
chanyou0311
0
410
データ分析基盤のはじめかた
chanyou0311
0
1.2k
ゼロから始める Python パッケージ配布
chanyou0311
0
260
フルリモートでもチームを作れる、超えられる!
chanyou0311
0
560
ひとり研修の体験談
chanyou0311
0
62
2020年、広島の地域 Python コミュニティの挑戦
chanyou0311
0
140
connpass-feeder で気になるイベントに参加しまくる!
chanyou0311
0
110
Other Decks in Technology
See All in Technology
Copilot for Security を使った MDE / Sentinel のログ調査
sophiakunii
2
240
RDS for Db2 はじめの一歩・作り方編 #1 /20240628-RDSforDb2-dojo
mayumihirano
0
220
Bring your app’s core features to users with App Intents とか App Intents 関連の要約
ryomm
1
280
生成AIを使った業務効率化〜実践的なプロンプトと活用例の紹介〜
yoshi8__
0
440
Oracle Exadata Database Service:サービス概要のご紹介
oracle4engineer
PRO
0
8k
マイクロサービスの現場からプラットフォームエンジニアリングの可能性を探る!
abnoumaru
1
4.9k
AWS CDK Conference Japan 2024 OP
tomoki10
0
260
Lernen durch Schmerzen! Mit Reinforcement Learning selbstlernende Systeme entwickeln
joergneumann
0
220
マルチエージェントで性能が上がったText-to-SQLのいま/Text-to-SQL
yoshidashingo
2
1.5k
機械学習クラスタ コンテナネットワーキング BoF
pfn
PRO
1
170
爆速開発文化を支えるProduct Engineerの 開発生産性向上の取り組み
shnjtk
10
3.7k
Wantedly流 エンジニアの心得 - これであなたもつよつよエンジニア⁉ -
k8yasuma
0
100
Featured
See All Featured
Web development in the modern age
philhawksworth
203
10k
Fashionably flexible responsive web design (full day workshop)
malarkey
399
65k
Reflections from 52 weeks, 52 projects
jeffersonlam
345
19k
Thoughts on Productivity
jonyablonski
62
4k
Building Flexible Design Systems
yeseniaperezcruz
322
37k
The Art of Programming - Codeland 2020
erikaheidi
46
12k
Docker and Python
trallard
36
2.8k
[RailsConf 2023] Rails as a piece of cake
palkan
31
4.3k
Building Adaptive Systems
keathley
33
2k
Unsuck your backbone
ammeep
664
57k
How to name files
jennybc
66
95k
Embracing the Ebb and Flow
colly
80
4.3k
Transcript
release-please で実現する ⼿軽で不変な Docker イメージタグ付け⽅法 chanyou
Yu Nakamura - chanyou ‧ DRE ← Data Engineer ←
SWE ‧ X: @chanyou0311 ‧ Google Cloud ‧ Azure
突然ですが、 コンテナ使ってますか?🙋
プライベートなアプリケーション開発における コンテナ構築⽅法
クラウドにおけるコンテナ技術
実⾏環境としてのコンテナ ‧Kubernetes でアプリケーションを容易にデプロイできる ‧コンテナ化されたアプリケーションの実⾏環境の整備 ‧AWS ECS ‧Azure App Service ‧GCP
Cloud Run
開発体験の良さ ‧ローカル環境と本番環境の差が⼩さい ‧FaaS だとローカルで動作環境⽤意するのが結構⼤変 ‧CI/CD の構築‧運⽤コストが低い ‧CI/CD パイプラインの再利⽤がしやすい
なぜ本番環境でコンテナを採⽤するのだろうか
Immutable Infrastructure の実現 ‧デプロイしやすい ‧スケールしやすい ‧ロールバックしやすい
コンテナ使えば Immutable Infrastructure を すぐに実現できる?
🙅
Immutable な Image が必要
Google Cloud のベストプラクティスを参考に https://cloud.google.com/architecture/best-practices-for-building-containers
https://cloud.google.com/architecture/best-practices-for-building-containers Google Cloud のベストプラクティスを参考に
セマンティック バージョニングを使⽤したタグ付け https://cloud.google.com/architecture/best-practices-for-building-containers
Git commit ハッシュを使⽤したタグ付け https://cloud.google.com/architecture/best-practices-for-building-containers
イメージのタグ付け難しい… ‧SemVer 😊 利便性は⾼い 😢 ⾃らバージョン番号管理するのは⼤変 ‧Git commit hash 😊
タグ付け⾃体は⾃動化すれば簡単 😢 ⼀つ前のバージョン…ってどれ?
いいとこ取りはできないだろうか 🤔
release-please
release-please > Rease Please automates CHANGELOG generation, the creation of
GitHub releases, and version bumps for your projects. ⾃動でリポジトリを SemVer 管理してくれるツール ‧CHANGELOG の更新 ‧GitHub リリースの作成 ‧任意の JSON や YAML ファイルの更新 https://github.com/googleapis/release-please
利⽤⽅法 ‧GitHub Actions (推奨) ‧CLI (npm) ‧GitHub App
どうやってバージョン管理しているのか Conventional Commits に従ってコミットメッセージを記述しておく https://github.com/googleapis/release-please
どうやっているのか release-please はコミットログのパースを⾏うことで次のバージョン番号 を導き出している v1.0.1 のとき fix: typo → v1.0.2
feat: いいね機能の追加 → v1.1.0
GitHub Actions での例
⽤意するもの (GitHub Actions) workflow: .github/workflows/release-please.yaml `uses: googleapis/release-please-action@v4` を呼び出す config: release-please-config.json
モノレポの場合、各サービスの設定を定義する manifest: .release-please-manifest.json モノレポの場合、各サービスのバージョンを記録する 例) {"frontend":"1.7.0","backend":"2.0.2"}
バージョンが更新されるまでの流れ 1. (開発者) Conventional Commits message で commit して push
する 2. (GitHub Actions) release-please (draft-mode) が実⾏されて PR が作成される 3. (開発者) PR をマージする 4. (GitHub Actions) release-please (deploy-mode) が実⾏される ◦ CHANGELOG の更新 ◦ GitHub リリースの作成 ◦ GitHub Actions で任意の処理の実⾏ ▪ ここで Docker Image の build と push を⾏う
デモ
これから個⼈ブログをリリースします
Docker Image のアーキテクチャ
インフラアーキテクチャ
ディレクトリ構成 .github/workflows/release-please.yaml release-please-config.json .release-please-manifest.json app/Dockerfile app/CHANGELOG.md helm/CHANGELOG.md
Docker Image の push までの流れ
まとめ
まとめ ‧release-please で⼿軽に SemVer を導⼊できた ‧⼿軽で不変な Docker Image の構築ができるようになった ‧Immutable
Infrastructure への扉が開かれた…! ‧コミットメッセージの記法に制約がかかる ‧チーム開発に適⽤できるかは要議論 ‧⽣成AIによるメッセージの補完に期待