Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
CI/CDのススメ(サイバーエージェント新卒研修2024)
Search
CyberAgent
PRO
June 05, 2024
Technology
1.2k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CI/CDのススメ(サイバーエージェント新卒研修2024)
CyberAgent
PRO
June 05, 2024
More Decks by CyberAgent
See All by CyberAgent
AIを使った広告商品の開発と評価設計の話
cyberagentdevelopers
PRO
1
51
動画広告の効果を技術で改善
cyberagentdevelopers
PRO
1
58
なぜWINTICKETはマイクロサービスをやめたのか
cyberagentdevelopers
PRO
2
82
”AIを使う” から ”AIに任せる” へ ─ 開発プロセスを再設計してAIを組織標準にするまで
cyberagentdevelopers
PRO
2
420
Databricks 導入から Genie 活用まで、全部やった話
cyberagentdevelopers
PRO
0
1.9k
専任DEゼロからの データ基盤構築 - Databricks x IaC x AIで 進める「データの民主化」-
cyberagentdevelopers
PRO
1
1.4k
「エンジニア進化論」2028年の開発完全自動化、エンジニアはどう進化するか
cyberagentdevelopers
PRO
10
10k
NAB Show 2026 動画技術関連レポート / NAB Show 2026 Report
cyberagentdevelopers
PRO
1
750
Local LLM Meetup #1 Opening
cyberagentdevelopers
PRO
1
570
Other Decks in Technology
See All in Technology
AI駆動で「他アプリの音を加工できる」アプリを作った
satomasahiro2005
0
150
Refining Active Record
shugo
0
160
Metadata - Section 1: HTML Basics
mohab1
0
120
Classmethod Company Deck
satoshi7
1
690
二歩目のフロントエンド・ウェブアクセシビリティ
camiha
2
620
Local CI × GitHub Actions
gogutan
2
200
Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
1
580
エンタメ企業のM&Aを支えるデータ基盤 ― 統合から店舗のリアルタイム分析まで / Data Engineering Summit 2026
genda
0
180
AI時代のPRレビューにどう向き合うか?
kairim0
1
240
PagerDuty Tech Hub-鳴らすけれど、人は動かない
ezaki
0
170
スプシの手作業からの解脱 ~更新はClaude Codeに、見せ方と使い方はGASアプリに任せる~
kentarofujii
0
150
AIにシークレットを見せない、WSL2で安全な開発環境
yazm
0
300
Featured
See All Featured
Marketing to machines
jonoalderson
1
5.9k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
500
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
730
New Earth Scene 8
popppiees
4
2.7k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
Typedesign – Prime Four
hannesfritz
42
3.2k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
410
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
440
For a Future-Friendly Web
brad_frost
184
10k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
Transcript
CI/CDのススメ サイバーエージェント 2024新卒研修 @ 2024/04/10 CyberAgent Infrastructure Unit / K.Saito
1
齋藤 健太 (Saito Kenta) • 入社年度 ◦ 2022
年 新卒入社 • 所属 ◦ CIU > Development Div • 最近の業務 ◦ プライベートクラウド運用 ◦ マネージドサービスの開発・運用 • 趣味 ◦ ゲーム・漫画 2
CI/CD? 3
CI / CD? CI: Continuous Integration CD: Continuous Delivery
Continuous Deployment 4
CI / CD? CI: Continuous Integration CD: Continuous Delivery
Continuous Deployment 5
CI / CD? CI: Continuous Integration CD: Continuous Delivery
Continuous Deployment 6 継続的な
CI / CD? CI: Continuous Integration CD: Continuous Delivery
Continuous Deployment 7 継続的な デプロイ デリバリー
CI / CD? CI: Continuous Integration CD: Continuous Delivery
Continuous Deployment 8 継続的な ???
CI / CD? CI: Continuous Integration CD: Continuous Delivery
Continuous Deployment 9 継続的な なにかをやる
CI • 「好きなタイミング」で「なにかをやらせる」 ◦ 「git push」で「テストをやる」 ◦ 「朝1時」で「バッチをやる」 ◦ 「特定のブランチにマージ」で「リリースする」
10
CI • 「好きなタイミング」で「なにかをやらせる」 ◦ 「git push」で「テストをやる」 ◦ 「朝1時」で「バッチをやる」 ◦ 「特定のブランチにマージ」で「リリースする」
11 手動でやるのはかなり辛い...
CI 12
CI 13
CI 14 GitOps
なにがうれしいの? 🤔 15
Q このコードの悪い点は? 16 package main import "fmt" func main() {
i := 0 fmt.Println("Hello, 世界") }
Q このコードの悪い点は? 17 package main import "fmt" func main() {
i := 0 fmt.Println("Hello, 世界") } $ go build . ./prog.go:8:2: i declared and not used
Q このコードの悪い点は? 18 func main() { i := 0 for
j := 0; j < 10; j++ { resp, err := http.Get("https://www.cyberagent.co.jp") if err != nil { panic(err) } defer resp.Body.Close() byteArray, err := io.ReadAll(resp.Body) if err != nil { panic(err) } fmt.Println(string(byteArray)) } }
Q このコードの悪い点は? 19 func main() { i := 0 for
j := 0; j < 10; j++ { resp, err := http.Get("https://www.cyberagent.co.jp") if err != nil { panic(err) } defer resp.Body.Close() byteArray, err := io.ReadAll(resp.Body) if err != nil { panic(err) } fmt.Println(string(byteArray)) } }
Q このコードの悪い点は? 20 func main() { i := 0 for
j := 0; j < 10; j++ { resp, err := http.Get("https://www.cyberagent.co.jp") if err != nil { panic(err) } defer resp.Body.Close() byteArray, err := io.ReadAll(resp.Body) if err != nil { panic(err) } fmt.Println(string(byteArray)) } }
毎回手でチェックは面倒😩 →CIでチェックしよう! 21
CI を行う大きな利点 22 認知負荷を下げられる
CI を行う大きな利点 • 「このコードってコンパイル通るの?」 ◦ 継続的にビルドしてチェック • 「このコードって書き方合ってるの?」 ◦ 継続的にLinterにかけてチェック
• 「このコードってどこにデプロイされているの?」 ◦ 継続的にデプロイされることで確認不要 23
Q このコードの悪い点は? 24 func main() { i := 0 for
j := 0; j < 10; j++ { resp, err := http.Get("https://www.cyberagent.co.jp") if err != nil { panic(err) } defer resp.Body.Close() byteArray, err := io.ReadAll(resp.Body) if err != nil { panic(err) } fmt.Println(string(byteArray)) } } コンパイルエラーで発見可能 Lintツールで発見可能
流行りのAIによるコードレビュー 25
CI を行う大きな利点 26 より高度なコードレビューを実 現 💪
CI を行う大きな利点 (再掲) • 「このコードってコンパイル通るの?」 ◦ 継続的にビルドしてチェック • 「このコードって書き方合ってるの?」 ◦
継続的にLinterにかけてチェック • 「このコードってどこにデプロイされているの?」 ◦ 継続的にデプロイされることで確認不要 27
CI を行う大きな利点 (再掲) • 「このコードってコンパイル通るの?」 ◦ 継続的にビルドしてチェック • 「このコードって書き方合ってるの?」 ◦
継続的にLinterにかけてチェック • 「このコードってどこにデプロイされているの?」 ◦ 継続的にデプロイされることで確認不要 28 コードの品質を担保 +チーム内で可視化
CI を行う大きな利点 (再掲) • 「このコードってコンパイル通るの?」 ◦ 継続的にビルドしてチェック • 「このコードって書き方合ってるの?」 ◦
継続的にLinterにかけてチェック • 「このコードってどこにデプロイされているの?」 ◦ 継続的にデプロイされることで確認不要 29 チームの合意を ソフトウェアで担保
CI を行う大きな利点 (再掲) • 「このコードってコンパイル通るの?」 ◦ 継続的にビルドしてチェック • 「このコードって書き方合ってるの?」 ◦
継続的にLinterにかけてチェック • 「このコードってどこにデプロイされているの?」 ◦ 継続的にデプロイされることで確認不要 30 チームの合意を ソフトウェアで担保
CIとは 31 ここまでがCIの説明
CI / CD? CI: Continuous Integration CD: Continuous Delivery
Continuous Deployment 32 継続的な
CI / CD? CI: Continuous Integration CD: Continuous Delivery
Continuous Deployment 33 継続的な デプロイ デリバリー
CD? 34 Delivery VS Deployment
Delivery VS Deployment 35 コード変更 ビルド Staging環境 にデプロイ Production環境 にデプロイ
CI(Continuous Integration) CD(Continuous Delivery) CD(Continuous Deployment) Production環境にデプロイ準備完了まで =CD(elivery) Production環境に自動デプロイ =CD(eployment)
CD? 36 Push VS Pull
Push VS Pull • Push型 ◦ CI上の一つのタスクとしてdev/stg/prd環境を操作 ◦ e.g. Ansible,
Terraform • Pull型 ◦ k8sやマネージドサービスからコードの更新を監視 → 変更があった際にコードをpullしてデプロイ ◦ e.g. ArgoCD 37
CDを行う大きな利点 • 「このコードってどこにデプロイされてるんだっけ?」 ◦ CDの設定を確認することで分かる • 「このコードってデプロイしたんだっけ?」 ◦ CDのStatusを確認することで分かる •
「このコードってどうやってデプロイするんだっけ?」 ◦ CDの設定時以外で意識することが無くなる 38
3. CI/CDを実現する ソフトウェア 39
現代のCIが持つ特徴 • 実行ごとに新しい環境がセットアップされる • Gitリポジトリに動作条件を記載する ◦ 実行タイミング・実行するコマンドやスクリプト • ライブラリのように共有して使えるエコシステムがある •
実行結果はWebやAPIで結果を確認できる 40 ※絶対にこの条件を満たさないといけないわけではありません!
代表的なCIサービス • SaaS 専業企業 ◦ CircleCI / Travis CI /
Bitrise / Xcode Cloud • パブリッククラウド付属サービス ◦ AWS CodeBuild / Google Cloud Cloud Build • その他 ◦ GitHub Actions • OSS(自前のマシンが必要) ◦ Jenkins 41
Github Actions • GitHub社が提供しているCIサービス • 様々なOSに対応している ◦ Linux, macOS,
Windows • 他ユーザーとワークフローを共有可能 42
代表的なCDサービス • CDはデプロイ先に応じて手法が異なる • パブリッククラウド付属サービス ◦ AWS CodePipeline / Google
Cloud Cloud Deploy • OSS ◦ ArgoCD ◦ PipeCD 43
• GitOps といえばこれ的なところがある • CLI, WebUI などユーザにあった操作も可能 • 依存関係のあるデプロイメントプロセスもサポート •
弊社での利用実績も多い • Public Cloud => Cloud Deploy, Code Deploy ArgoCD 44
ご清聴ありがとうございました! 45