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
リリース戦略を支えるCI/CDパ イプライン
Search
katzumi
March 26, 2024
Technology
0
6
リリース戦略を支えるCI/CDパ イプライン
CI/CD Test Night #7
https://testnight.connpass.com/event/311263/
katzumi
March 26, 2024
Tweet
Share
More Decks by katzumi
See All by katzumi
設計原則、アーキテクチャパターン、アーキテクチャスタイルの違いって何?いつどう向き合ったらいいの?を考えてみる
katzumi
0
40
『eg-r2』のご紹介
katzumi
0
8
runn開発者会議福岡2024
katzumi
0
9
APIテストでもカバレッジ測定 したい!
katzumi
0
7
Slidevのテンプレートリポジトリについて
katzumi
0
110
OSSへの感謝を伝える
katzumi
0
590
モブワークを進化させていった話
katzumi
0
440
ActiveRecordパターンの呪縛を学びほぐして挑むクリーンアーキテクチャへの入り口
katzumi
0
42
実装と乖離させないスキーマ駆動開発フロー / OpenAPI Laravel編
katzumi
0
260
Other Decks in Technology
See All in Technology
ecspressoの設計思想に至る道 / sekkeinight2025
fujiwara3
11
1.7k
ゼロから始めるSREの事業貢献 - 生成AI時代のSRE成長戦略と実践 / Starting SRE from Day One
shinyorke
PRO
0
240
公開初日に個人環境で試した Gemini CLI 体験記など / Gemini CLI実験レポート
you
PRO
3
360
AI エンジニアの立場からみた、AI コーディング時代の開発の品質向上の取り組みと妄想
soh9834
7
400
SAE J1939シミュレーション環境構築
daikiokazaki
0
160
CSPヘッダー導入で実現するWebサイトの多層防御:今すぐ試せる設定例と運用知見
llamakko
1
220
The Madness of Multiple Gemini CLIs Developing Simultaneously with Jujutsu
gunta
1
2.6k
Talk to Someone At Delta Airlines™️ USA Contact Numbers
travelcarecenter
0
170
From Live Coding to Vibe Coding with Firebase Studio
firebasethailand
1
170
2025-07-25 NOT A HOTEL TECH TALK ━ スマートホーム開発の最前線 ━ SOFTWARE
wakinchan
0
140
Jitera Company Deck / JP
jitera
0
160
Ktor + Google Cloud Tasks/PubSub におけるOTel Messaging計装の実践
sansantech
PRO
1
300
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Side Projects
sachag
455
43k
Optimizing for Happiness
mojombo
379
70k
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
Automating Front-end Workflow
addyosmani
1370
200k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
760
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.2k
Code Review Best Practice
trishagee
69
19k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Gamification - CAS2011
davidbonilla
81
5.4k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Transcript
リリース戦略を支えるCI/CD パ イプライン Press Space for next page CI/CD Test
Night #7 March 26, 2024. v0.0.11 @katzumi( かつみ)
自己紹介 「障害のない社会をつくる」をビジョンに掲げている「りたりこ」という会社に所属しています 以下のアカウントで活動しています。 2 / 42 katzumi (かつみ)と申します。 katzchum k2tzumi
katzumi
3 / 42 複雑なドメインと向き合っています ハンドブックとは?🤔 圧巻の 1.5K 頁オーバー。レセプト業務の基盤システムを開発しています!
お願い 登壇者の励みになるので是非ともご意見やご感想など、フィードバック頂けると助かります mm あとでスライドを公開します 4 / 42 写真撮影、SNS での実況について 🙆♀📷
🙅♂📹💸 🙅📸👨👦👦 #cicd_test_night
今日お話すること・話さないこと 5 / 42 スコープ的なお話 🤫話さないこと 詳細な workflow や設定内容 ブランチワークの説明
📣話すこと リリース管理での悩み事 リリース戦略 開発プロセスの見直し 省力化・自動化内容
6 / 42 本プログラムのゴール🏁 プロダクトのリリース戦略を考えるきっかけになれば嬉しいです 想定ターゲット層 リリース間隔が 2 週〜1 ヶ月程度(定期リリース)のプロダクト
開発プロセスにリリース前の受け入れテストがある 品質保証テスト(QAT) 、ユーザー受入れテスト(UAT) 複数リポジトリに分割され依存関係があるサービス マイクロサービスとか、フロントエンド(アプリ含む) ・バックエンドに分かれている 複数チームによる開発 SRE とか Platform Engineering 領域 リリース調整業の軽減
7 / 42 プログラムの流れ 1. リリース管理のつらみ 2. 今回のお話( 事例プロジェクト説明) 3.
リリース戦略 4. 運用課題 5. ソリューション 6. 改善結果 7. まとめ Agenda
8 / 42 リリース管理つらみ
9 / 42 リリース管理が大変な理由 だんだんシステムが複雑になり、依存関係が発生してデプロイの難易度があがる 関係者も多数で調整が大変 開発着手順がそのままリリース順とはならない 開発規模がさまざまで尚且つ並行開発される 内外に向けての適切なタイミングでリリース内容を共有しないといけない 必要な情報は受け取り手によっても違うし、多岐にわたる
システム全体と関係各位の状況を把握する必要がある 日々変化する状況に対応していかなければならない
10 / 42 リリースやデプロイを判断する人が固定化する問題 この機能はいつリリースだっけ?と脳内リソースを一定消費してしまう リリース都度に判断を求められる プロジェクトリーダー的な人に負担が集中しがち。慣れな部分ではあるけれど
11 / 42 今回のお話 事例となるプロジェクトの説明
12 / 42 プロジェクト概略 自社サービスから接続する BaaS (レセプト業務を扱う API ) スキーマ駆動開発を採用
接続するアプリケーションが複数存在し、それぞれ別チームが運営 シングルテナンシー(single-tenancy )で利用する想定 稼働するバージョンがサービスによって異なる可能性がある 3 チーム体制で担当サービスを平行開発する 月 1 回程度の定期リリースする リリース前に品質保証テストを実施する 1. センシティブな情報を扱うので、データ管理上のリスクがある。 また、サービスを跨ってのリリース調整は難しいとの判断 ↩︎ 所謂マイクロサービスの 1 つのサービス [1]
13 / 42 悩みごと プロジェクト立ち上げ時の課題認識 バージョン管理の複雑さ 複数バージョンが並行稼働する API 仕様書とアプリケーションの同期 アプリケーションと
API 仕様書のバージョンの同期して共有する必要がある スキーマを公開してから、クライアント要望などで見直される可能性 バージョンの把握難易度 クライアントごとや環境ごとにどのバージョンが反映されているかを把握するのが難しい 仕様確認や不具合発生時の問い合わせが複数のチームから発生する
14 / 42 リリース戦略
15 / 42 リリーストレイン 特定の期間ごとにリリースする手法 リリース日を決めてリリースブランチカットを行い、リリースに間に合わなかった機能は 次のリリースタイミングに先送りする
16 / 42 リリースブランチカットするタイミング(git-flow ) 1. 開発スコープを決めて QA リソースも抑えてリリース日を決める 2.
開発開始してテスト可能になったら develop 用 build をテスト環境に開発者がリリース 3. QA がテスト環境で検証。問題があれば 2 からやり直し 4. リリースのリハーサルの前日にタグ付け 5. Release 用 build をステージング環境でリリース・リハーサル実施 6. リリース日に本番環境へリリース 1. develop ブランチへの merge を起点にしてビルド 任意のタイミングで任意のブランチでのビルドも可 ↩︎ 2. タグ付けを起点にしてビルド ↩︎ 連携サービスでのパターン例 [1] [2]
16 / 42 リリースブランチカットするタイミング(git-flow ) 1. 開発スコープを決めて QA リソースも抑えてリリース日を決める 2.
開発開始してテスト可能になったら develop 用 build をテスト環境に開発者がリリース 3. QA がテスト環境で検証。問題があれば 2 からやり直し 4. リリースのリハーサルの前日にタグ付け 5. Release 用 build をステージング環境でリリース・リハーサル実施 6. リリース日に本番環境へリリース 1. develop ブランチへの merge を起点にしてビルド 任意のタイミングで任意のブランチでのビルドも可 ↩︎ 2. タグ付けを起点にしてビルド ↩︎ 連携サービスでのパターン例 [1] [2]
17 / 42 見直し後のリリースブランチカットするタイミング リリース日が未定な状態でもバージョンタグを付ける 開発環境へのデプロイするタイミングでタグを付ける タグ連動したリリースフローの整備 API 仕様書もバージョン管理する アプリケーションにバージョン情報を埋め込む
🖕をアプリケーションのリリースと連動させたバージョン管理 細かくリリースブスブランチを切る戦略
17 / 42 見直し後のリリースブランチカットするタイミング リリース日が未定な状態でもバージョンタグを付ける 開発環境へのデプロイするタイミングでタグを付ける タグ連動したリリースフローの整備 API 仕様書もバージョン管理する アプリケーションにバージョン情報を埋め込む
🖕をアプリケーションのリリースと連動させたバージョン管理 細かくリリースブスブランチを切る戦略
17 / 42 見直し後のリリースブランチカットするタイミング リリース日が未定な状態でもバージョンタグを付ける 開発環境へのデプロイするタイミングでタグを付ける タグ連動したリリースフローの整備 API 仕様書もバージョン管理する アプリケーションにバージョン情報を埋め込む
🖕をアプリケーションのリリースと連動させたバージョン管理 細かくリリースブスブランチを切る戦略
18 / 42 開発プロセス見直しの狙い タグ付けを逐次行うスタイル
18 / 42 開発プロセス見直しの狙い 1. 依存関係のあるサービスのバージョンを明確化 共通の統一したバージョン(= コミット ID /≠ブランチ)を関係チームと共有した状態にする
タグ付けを逐次行うスタイル
18 / 42 開発プロセス見直しの狙い 1. 依存関係のあるサービスのバージョンを明確化 共通の統一したバージョン(= コミット ID /≠ブランチ)を関係チームと共有した状態にする
2. バージョンを小出しにすることで、フィードバックサイクルを早くする ビックバンリリースにしない あわせてバージョンの差分も見やすくする タグ付けを逐次行うスタイル
18 / 42 開発プロセス見直しの狙い 1. 依存関係のあるサービスのバージョンを明確化 共通の統一したバージョン(= コミット ID /≠ブランチ)を関係チームと共有した状態にする
2. バージョンを小出しにすることで、フィードバックサイクルを早くする ビックバンリリースにしない あわせてバージョンの差分も見やすくする 3. 参照した API 仕様書のバージョンで、いつでも安心して開発着手ができるようにする バージョン指定で環境を再現可能にすることで、クライアント側で対応するバージョンを選択できる API 仕様書とアプリケーションのバージョンの乖離を発生させない タグ付けを逐次行うスタイル
19 / 42 運用課題
運用負荷上昇のリスク 依存関係の元と先の両方の運用を考える必要がある 20 / 42 それぞれ運用負荷増となる サービス提供側(プロバイダ) タグ付け作業 そもそもタグ付けのルールどうする?🤔 リリースノート作成
ドキュメント反映 リリース前準備や付帯作業 サービス利用側(コンシューマ) 各環境のデプロイの調整 API 仕様書の差分を追うのが大変 バージョン差異の影響度がわからない
運用負荷上昇のリスク 依存関係の元と先の両方の運用を考える必要がある 20 / 42 それぞれ運用負荷増となる サービス提供側(プロバイダ) タグ付け作業 そもそもタグ付けのルールどうする?🤔 リリースノート作成
ドキュメント反映 リリース前準備や付帯作業 サービス利用側(コンシューマ) 各環境のデプロイの調整 API 仕様書の差分を追うのが大変 バージョン差異の影響度がわからない
運用負荷上昇のリスク 依存関係の元と先の両方の運用を考える必要がある 20 / 42 それぞれ運用負荷増となる サービス提供側(プロバイダ) タグ付け作業 そもそもタグ付けのルールどうする?🤔 リリースノート作成
ドキュメント反映 リリース前準備や付帯作業 サービス利用側(コンシューマ) 各環境のデプロイの調整 API 仕様書の差分を追うのが大変 バージョン差異の影響度がわからない
21 / 42 ⚠開発プロセスとして 正しく運用されなければ 絵に描いた餅になる
22 / 42 ソリューション
23 / 42 どう立ち向かうか?
24 / 42 OSS の開発スタイルに倣う
25 / 42 セマンティックバージョニング <version core> ::= <major> "." <minor>
"." <patch> SemVer
26 / 42 セマンティックバージョニングとは? Semantic Versioning おさらい より バージョン番号( <major>
"." <minor> "." <patch> ) 間の差分で互換性を表す 1. 基本的に数字 3 つでバージョンを表し、リリース前の不安定なバージョンには alpha や rc などがつくことがある 2. 一番左の数字が大きくなったら後方互換性がない 3. 一番左の数字が 0 のときはどの数字が上がっても後方互換性がない 4. たまに一番左以外の数字があがったときに後方互換性がない場合がある “
tagpr
28 / 42 tagpr との出会い k1LoW @k1LoW·Follow これがtagprで実現したかったこと 統制されていながらも自由なリリースの自動化 エイッと踏み込んでくださった
@katzchum さんに感謝 katzchum@katzchum おー。自動で作られている! mergeしちゃっていいかな。ドキドキ github.com/k1LoW/runn/pul… 8:01 PM · Oct 1, 2022 7 Reply Copy link Read more on X
29 / 42 tagpr の動き リリース用のpull request を自動作成し、マージされたら自動でタグを打つtagpr 1. リリース用の
pull request が GitHub Actions で自動で作られる バージョン番号が書かれたファイルや CHANGELOG.md を自動更新 2. その pull request をマージするとマージコミットに自動でバージョン tag が打たれる semver 前提
30 / 42 Demo https://github.com/k2tzumi/empowering-release-strategies-cicd-pipelines
31 / 42 tagpr でのリリース&バージョン管理事例 本スライドは Slidev という Markdown でスライド作成するツールを利用しています
Markdown は GitHub でリポジトリ管理しています。 バージョン番号はこれ(スライド執筆時点) 実はこのスライドも管理されていたりします
32 / 42 tagpr まとめ GitHub flow のデメリットを補う最後のピース SemVer によるバージョン管理
バージョン番号で影響度がわかるようになる リリース手順に非常に緩い制約付けがされる リリースの workflow の起点となる CHANGELOG やリリースノートも連動して作成される リリース作業自体がオープン化される 次にリリースされる内容が他のチームからもわかる
33 / 42 改善結果
34 / 42 リリースworkflow で実現したアレコレ 次バージョンでの build 作成 OpenAPI 仕様書公開
S3 静的ウェブサイトホスティングに sync 以下の 3 つのバージョンでの仕様書公開 latest リリースタイミングで反映 次バージョン リリースブランチに merge 時に反映 過去のバージョン OpenAPI の仕様書のバージョン間の差分作成 Tufin/oasdiff で breaking changes を検知 1. ビルドコストを下げる為に現時点では停止中 ↩︎ 実装例です [1]
35 / 42 tagpr のTips 次のバージョン決定が label 連動で制御される Migration 有や
OpenAPI 変更有のラベルと連動して Minor アップデートにする [tagpr] minorLabels = migration,oas-change 本リリースなのか?仮リース なのか?判定する方法 tagpr のアクション呼び出し後の outputs.tag を判定して github script 経由で後続の wokflow の dispatch を 呼び分ける 本リリース if: steps.tagpr.outputs.tag != '' 仮リリース if: steps.tagpr.outputs.tag == '' 1. リリースブランチへの merge が通常の Pull Request のものか? ↩︎ [1]
36 / 42 CD パイプライン全体まとめ ✅はtagpr 標準機能で実現 イベント ワークフロー・アクション リリースブランチ
Merge 時 ✅リリース用 PR 作成 次リリースバージョンの API 仕様書作成(swagger-php, redoc ) 次リリースバージョンのコンテナイメージ作成(ECR push ) リリース用 PR Merge 時 ✅リリースタグ付け ✅API バージョン情報書き換 ✅CHANGELOG 更新 ✅リリース(ノート)作成(tagpr+GitHub ) リリースバージョンのコンテナイメージ作成(ECR push ) API 仕様書公開(Latest 反映) API 仕様書変更点まとめ(oasdiff ) チーム開発環境リリース時 タグ指定して runn でEC2 へデプロイ(ssh 自動化ツールとして利用) テスト環境以降リリース時 タグ指定して ecspresso でECS へデプロイ(GitHub Action 経由)
37 / 42 ドキュメントの品質向上への取り組み(CI ) スキーマ駆動開発で仕様書の品質確保が重要 OpenAPI の仕様書の静的チェック stoplightio/spectral で
Lint OpenAPI の関連ツールで仕様書を利用可能か?を検証する OpenAPI の仕様書と API の実装が乖離していないか?のチェック runn を利用してリクエストとレスポンスが OpenAPI の仕様書通りか? テストする
38 / 42 まとめ
39 / 42 tagpr を導入して感じたメリット CI/CD パイプラインを充実させることで運用負荷がかからず開発者体験の向上ができる テスト環境以降のデプロイ作業を各サービスのチームメンバーへタスク移譲できた テスト OK
になったバージョンでリリーストレインに乗るイメージ API 変更点の共有を省力化 バージョンアップ時にリリースノートを共有するだけ 最新 API 仕様書をいつでも見られるようにした(遅延なし) 差分もログとして管理される リリースマネジメントが民主化される 次回のリリース内容が見えるようになって、いい感じに協調できる
40 / 42 tagpr の波及効果 行動様式が変わりそうな予感 SRE 部門も使い始めた ベースイメージを tagpr
でバージョン管理し、依存しているリポジトリで renovate させる → 共通コンポーネントや、ベースイメージなどプラットフォーム領域と相性が良さそう 細かくリリースを心がけるようになる tagpr がリリース用 PR を纏めてくれることで、細かくリリースをしようとするマインドになる バージョンのトレースがし易くなった ログや監視ツールに API のバージョンを表示さるようにした バージョン齟齬によるエラーが直ぐに判別できる
41 / 42 参考資料&リンク セマンティック バージョニング 2.0.0 https://semver.org/lang/ja/ Songmu/tagpr https://github.com/Songmu/tagpr
リリース用の pull request を自動作成し、マージされたら自動でタグを打つ tagpr https://songmu.jp/riji/entry/2022-09-05-tagpr.html tagpr で実現する Pull Request 上で進める OSS のリリースマネジメント https://k1low.hatenablog.com/entry/2022/10/04/083000 登壇を支える技術 https://zenn.dev/katzumi/articles/technology-supporting-speakers runn https://github.com/k1LoW/runn 1. Demo したリポジトリの説明記事です ↩︎ [1]
42 / 42 ご清聴ありがとうございました
None