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
Junichi Mitsunaga
March 19, 2019
Technology
2.1k
0
Share
自動化を支えるCI/CDパイプライン
Azure DevOpsツールを使ったCI/CD導入例を紹介します
Junichi Mitsunaga
March 19, 2019
More Decks by Junichi Mitsunaga
See All by Junichi Mitsunaga
New Relic_開発・運用チームを生成AIで繋ぐビジネス視点を醸成するオブザーバビリティ戦略
junichimitsunaga
1
120
Azure DevOps Community LT 文化醸成とツール支援
junichimitsunaga
0
98
Other Decks in Technology
See All in Technology
RubyでRuby拡張を書いたらRubyより35倍速になったってどういうこと??
kazuho
3
710
『家族アルバム みてね』における インシデント対応との向き合い方 / Approach incident response in Family Album
kohbis
2
240
Claude Code x Accounting
kawaguti
PRO
1
340
Kiro CLI v2.0.0がやってきた!
kentapapa
0
200
管理アカウント単一運用からAWS Organizationsに移行するの大変で滅
hiramax
0
290
Oracle Cloud Infrastructure:2026年5月度サービス・アップデート
oracle4engineer
PRO
1
220
GitHub Copilot のこれまでとこれから: From Copilot to Collaborative Agents
yuriemori
1
230
【ハノーバーメッセ振り返りイベントat名古屋】データは集約からAI起点の収集に ~組織内・組織間でのデータ連携~
tanakaseiya
0
140
大規模災害時でも高い信頼性を維持するアプリケーション基盤の実現/nikkei-tech-talk46
nikkei_engineer_recruiting
0
110
Amazon CloudFrontにおけるAIボットアクセス制御のポイント
kizawa2020
5
300
Amazon Bedrock 経由の Claude Cowork を試してみよう・MCP にも繋いでみよう
sugimomoto
0
240
AIガバナンス実践 - 生成AIコネクタのデータ漏洩リスクと実務対策
knishioka
0
120
Featured
See All Featured
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
260
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Test your architecture with Archunit
thirion
1
2.2k
How to train your dragon (web standard)
notwaldorf
97
6.6k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
340
Building the Perfect Custom Keyboard
takai
2
770
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
ラッコキーワード サービス紹介資料
rakko
1
3.4M
Facilitating Awesome Meetings
lara
57
6.9k
The World Runs on Bad Software
bkeepers
PRO
72
12k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
190
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
130
Transcript
ポッケの自動化を支える CI/CDパイプライン 株式会社ポッケ 満永 淳一
自己紹介 ▪ 名前:満永 淳一 ▪ twitter:@Junichi_M_ ▪ 所属:株式会社ポッケ ▪ 役割: アプリケーションエンジニア
→ SREエンジニアになろうとしている
お伝えしたいこと ▪ポッケのCI/CDパイプライン – ポッケで利用しているツールや実装について ▪CI/CDパイプライン運用の注意点 お伝えしないこと ・利用しているOSS ・ Infrastructure as
codeの取り組み
アジェンダ ▪解決したかったこと ▪CI/CDパイプライン構成 ▪CI/CDパイプラインの運用 ▪まとめ
解決したかったこと
背景 モノリスからの脱却、マイクロサービス化
背景 ドメイン分析からマイクロサービス化もできた
背景 テストコード実装も根付いてきた
背景 そろそろ環境作って動かしたいよね?
マイクロサービス化で実現したいこと アプリ編 ▪ 定期的に品質の確認をしたい ▪ 変更に強いシステムにしたい ▪ デリバリーを容易にしたい
マイクロサービス化で実現したいこと アプリ編 ▪ 定期的に品質の確認をしたい ・いつからテストに失敗したか不明 ▪ 変更に強いシステムにしたい ・デグレが起こる ▪ デリバリーを容易にしたい
・数が多いので手動デプロイはキツイ
次やること 継続的インテグレーション、 継続的デリバリーをしよう!
継続的インテグレーション(Continuous integration) 継続的インテグレーションとは? プロダクトのソースコードがチェックインされるたびに、 テストやビルドといった一連のプロセスを自動で実行すること 参考 https://www.atmarkit.co.jp/ait/articles/1903/19/news007.html
継続的デリバリー(Continuous delivery) 継続的デリバリーとは? 継続的に動作するソフトウェアをリリースすること 迅速なビジネス価値を提供できる ユーザーからのフィードバックをビジネス価値に変換できる リスクの少ないリリースプロセスの確立
CI/CDパイプラインの構成
CI/CDパイプライン草案 こんな感じにしたいね
CI/CDパイプライン草案 こんな感じにしたいね CI/CDツールって重要
CI/CDツール Azure DevOpsを選びました
CI/CDツールにAzure DevOpsを選んだ理由 Azure DevOps とは? マイクロソフトの DevOps ツールで、Git リポジトリやプロジェクト管理のためのカンバンボード、ダッシュボー ド、CI/CD
のパイプライン作成など、様々な機能を有している https://medium.com/@yuhattor/microsoft-の-devops-への道のり-db59c0848d78より一部抜粋 参考 https://medium.com/@yuhattor/microsoft-の-devops-への道のり-db59c0848d78
CI/CDパイプライン
(再掲)マイクロサービス化で実現したいこと アプリ編 ▪ 定期的に品質の確認をしたい ▪ 変更に強いシステムにしたい ▪ デリバリーを容易にしたい
解決できたこと① ▪ 定期的に品質の確認をし たい ▪ 変更に強いシステムにし たい 通知が来るので失敗したら すぐにわかる テストが実行されるので
デグレが検知できる
解決できたこと② ▪ デリバリーを容易にし たい 本番とStagingを差別化 ・PdM ・責任者 ・SRE
全て解決 ▪ 定期的に品質の確認 をしたい → 解決 ▪ 変更に強いシステムに したい →
解決 ▪ デリバリーを容易にし たい → 解決
CI/CDパイプラインの運用
CI/CDツールを導入して気づいたこと① ▪ テスト失敗の原因特定時間が短縮できた ▪ エンジニアがテスト結果に興味を示すようになった
CI/CDツールを導入して気づいたこと② ▪ CIが失敗した原因が分かりずらい ▪ CI/CDツールの管理が属人化した Azure DevOpsおじさんの誕生 手作業で設定している部分が多い ▪ 変更が発生した場合、反映に時間がかかった
マイクロサービスだとCI/CDパイプライン数も多いので 運用に時間がかかる
CI/CDツールを導入して気づいたこと② ▪ CIが失敗した原因が分かりずらい 原因の特定が難しかった 発生する大量のlogの中から失敗したテストをさがす…
CIが失敗した原因が分かりずらい テストの粒度を分けました
テストサイズによる分割 Googleが提唱しているTest Sizesの概念を参考にテストフェーズを分割を試みた Test Sizesとは? ▪ Small ネットワークアクセスなどは全てモック化し、外部の依存がないテスト 単体テスト
▪ Medium ローカルホストだけからのアクセスがある環境でのテスト ▪ Large プロダクション環境に近い環境でのテスト エンドツーエンドまたはシステムテスト
テストサイズによる分割 テストの分割において、Googleが提唱しているTest Sizesの概念を参考にテストフェーズを分割 参考 https://www.atmarkit.co.jp/ait/articles/1903/19/news007_2.html#l_news007_03.png
テストサイズによる分割 テストの分割において、Googleが提唱しているTest Sizesの概念を参考にテストフェーズを分割 参考 https://www.atmarkit.co.jp/ait/articles/1903/19/news007_2.html#l_news007_03.png
CIパイプライン GUIは非常にシンプルなので作成はそこ まで複雑ではない ↓ 新しいCIパイプラインを作成する際には 特定の場所を変更する ↓ 手作業なので手順が必要 ↓ 変更があると反映まで時間がかかる
CIパイプライン設定画面
Pipeline as Codeの導入
CIパイプライン CIパイプラインのタスクをコードベースで 管理 ↓ テンプレート化ができた 変更に強くなった pool: name: Default-Pool demands:
maven steps: - task: Maven@1 displayName : 'TEST COVERAGE' inputs: mavenPomFile : ut/pom.xml goals: 'clean verify jacoco:report -Dwebs.mock="mock"' codeCoverageToolOption : JaCoCo codeCoverageClassFilter : '+:**.batch.facade.*,+:**.batch.util.*' - task: Docker@1 displayName : 'Build an image' inputs: azureSubscriptionEndpoint : 'sampleEndPoint' azureContainerRegistry : sampleEndPointRegistory imageName : 'sampleEndPointRegistory/$(Build.Repository.Name):$(Build.BuildNumber)' - task: Docker@1 displayName : 'Push an image' inputs: azureSubscriptionEndpoint : 'sampleEndPoint' azureContainerRegistry : sampleEndPointRegistory command: 'Push an image' imageName : 'sampleEndPointRegistory/$(Build.Repository.Name):$(Build.BuildNumber)'
CDパイプライン GUIは非常にシンプルなので作成はそこ まで複雑ではない ↓ 手作業なので手順が必要 CDパイプライン設定画面
まとめ
所感 ▪ pipeline as codeのように全体の流れを自動化することで 流れ自体にも信頼性が生まれてきた ▪ CI/CDを導入してそれなりに運用出来てきた… 振り返ってみるとまだまだカイゼンすることがたくさんある
今後やること ▪ DevSecOpsを目指す パイプラインの流れにセキュリティ診断を導入する ▪ CIパイプラインの最適化 CIテスト時間の最適化 CIパイプラインのテストサイズによる最適化 ▪ CDパイプラインのコード化を検討する
ご清聴 ありがとうございました