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のススメ(サイバーエージェント新卒研修2024)
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
CyberAgent
PRO
June 05, 2024
Technology
1.1k
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
Databricks 導入から Genie 活用まで、全部やった話
cyberagentdevelopers
PRO
0
57
専任DEゼロからの データ基盤構築 - Databricks x IaC x AIで 進める「データの民主化」-
cyberagentdevelopers
PRO
0
45
「エンジニア進化論」2028年の開発完全自動化、エンジニアはどう進化するか
cyberagentdevelopers
PRO
9
8.3k
NAB Show 2026 動画技術関連レポート / NAB Show 2026 Report
cyberagentdevelopers
PRO
0
260
Local LLM Meetup #1 Opening
cyberagentdevelopers
PRO
0
410
LocalLLMで機密データを匿名化したい
cyberagentdevelopers
PRO
1
410
Vibe Fine-Tuning Version 2 — RunPod SSH で安く学習してみた
cyberagentdevelopers
PRO
0
400
2026年度新卒技術研修 サイバーエージェントのデータベース 活用事例とパフォーマンス調査入門
cyberagentdevelopers
PRO
10
11k
マッチングアプリにおけるユーザー構成の変化は、事業KPIにどう影響しているのか
cyberagentdevelopers
PRO
1
210
Other Decks in Technology
See All in Technology
Microsoft のサポートとフィードバック総まとめ
murachiakira
PRO
0
130
自分が詳しくない領域でAIを使う #プロヒス2026
konifar
20
8.2k
デジタル・デザイン構想 by Sayaka Ishizuka
y150saya
0
150
作る力から、見極める力へ — AI時代に広がるエンジニアの価値と役割
rince
0
390
アラート調査向けAIエージェントの本番導入とその後/AI Agents for Alert Investigation: Production Deployment and After
taddy_919
1
300
AIDLC_ヤフーショッピングの取り組み
lycorptech_jp
PRO
0
180
AIに障害切り分けを全部やってもらった。 。 。 。
estie
0
310
From Prompt Engineering to Loop Engineering
shibuiwilliam
1
310
小さいから、全部わかる。— 常駐AI "xangi" のすすめ
sugupoko
0
200
PostgreSQL 19 新機能概要 OSC Hokkaido 2026
nori_shinoda
0
260
トークン最適化のためのユーザーストーリー分析 / User Story Analysis for Token Optimization
oomatomo
0
150
きのこカンファレンス2026_肩書きを外したとき私は誰か
yamasatimi
1
110
Featured
See All Featured
Building Adaptive Systems
keathley
44
3.1k
BBQ
matthewcrist
89
10k
How to make the Groovebox
asonas
2
2.2k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
67
55k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
Building the Perfect Custom Keyboard
takai
2
800
The Language of Interfaces
destraynor
162
27k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
160
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2k
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