Slide 1

Slide 1 text

release-please で実現する ⼿軽で不変な Docker イメージタグ付け⽅法 chanyou

Slide 2

Slide 2 text

Yu Nakamura - chanyou ‧ DRE ← Data Engineer ← SWE ‧ X: @chanyou0311 ‧ Google Cloud ‧ Azure

Slide 3

Slide 3 text

突然ですが、 コンテナ使ってますか?🙋

Slide 4

Slide 4 text

プライベートなアプリケーション開発における コンテナ構築⽅法

Slide 5

Slide 5 text

クラウドにおけるコンテナ技術

Slide 6

Slide 6 text

実⾏環境としてのコンテナ ‧Kubernetes でアプリケーションを容易にデプロイできる ‧コンテナ化されたアプリケーションの実⾏環境の整備 ‧AWS ECS ‧Azure App Service ‧GCP Cloud Run

Slide 7

Slide 7 text

開発体験の良さ ‧ローカル環境と本番環境の差が⼩さい ‧FaaS だとローカルで動作環境⽤意するのが結構⼤変 ‧CI/CD の構築‧運⽤コストが低い ‧CI/CD パイプラインの再利⽤がしやすい

Slide 8

Slide 8 text

なぜ本番環境でコンテナを採⽤するのだろうか

Slide 9

Slide 9 text

Immutable Infrastructure の実現 ‧デプロイしやすい ‧スケールしやすい ‧ロールバックしやすい

Slide 10

Slide 10 text

コンテナ使えば Immutable Infrastructure を すぐに実現できる?

Slide 11

Slide 11 text

🙅

Slide 12

Slide 12 text

Immutable な Image が必要

Slide 13

Slide 13 text

Google Cloud のベストプラクティスを参考に https://cloud.google.com/architecture/best-practices-for-building-containers

Slide 14

Slide 14 text

https://cloud.google.com/architecture/best-practices-for-building-containers Google Cloud のベストプラクティスを参考に

Slide 15

Slide 15 text

セマンティック バージョニングを使⽤したタグ付け https://cloud.google.com/architecture/best-practices-for-building-containers

Slide 16

Slide 16 text

Git commit ハッシュを使⽤したタグ付け https://cloud.google.com/architecture/best-practices-for-building-containers

Slide 17

Slide 17 text

イメージのタグ付け難しい… ‧SemVer 😊 利便性は⾼い 😢 ⾃らバージョン番号管理するのは⼤変 ‧Git commit hash 😊 タグ付け⾃体は⾃動化すれば簡単 😢 ⼀つ前のバージョン…ってどれ?

Slide 18

Slide 18 text

いいとこ取りはできないだろうか 🤔

Slide 19

Slide 19 text

release-please

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

利⽤⽅法 ‧GitHub Actions (推奨) ‧CLI (npm) ‧GitHub App

Slide 22

Slide 22 text

どうやってバージョン管理しているのか Conventional Commits に従ってコミットメッセージを記述しておく https://github.com/googleapis/release-please

Slide 23

Slide 23 text

どうやっているのか release-please はコミットログのパースを⾏うことで次のバージョン番号 を導き出している v1.0.1 のとき fix: typo → v1.0.2 feat: いいね機能の追加 → v1.1.0

Slide 24

Slide 24 text

GitHub Actions での例

Slide 25

Slide 25 text

⽤意するもの (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"}

Slide 26

Slide 26 text

バージョンが更新されるまでの流れ 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 を⾏う

Slide 27

Slide 27 text

デモ

Slide 28

Slide 28 text

これから個⼈ブログをリリースします

Slide 29

Slide 29 text

Docker Image のアーキテクチャ

Slide 30

Slide 30 text

インフラアーキテクチャ

Slide 31

Slide 31 text

ディレクトリ構成 .github/workflows/release-please.yaml release-please-config.json .release-please-manifest.json app/Dockerfile app/CHANGELOG.md helm/CHANGELOG.md

Slide 32

Slide 32 text

Docker Image の push までの流れ

Slide 33

Slide 33 text

まとめ

Slide 34

Slide 34 text

まとめ ‧release-please で⼿軽に SemVer を導⼊できた ‧⼿軽で不変な Docker Image の構築ができるようになった ‧Immutable Infrastructure への扉が開かれた…! ‧コミットメッセージの記法に制約がかかる ‧チーム開発に適⽤できるかは要議論 ‧⽣成AIによるメッセージの補完に期待