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
第163回 雲勉 CircleCIで複数リポジトリ間のパイプラインを連携する
Search
iret.kumoben
June 12, 2025
Technology
1
38
第163回 雲勉 CircleCIで複数リポジトリ間のパイプラインを連携する
下記、勉強会での資料です。
https://youtu.be/KBLuGzMw8Bk
iret.kumoben
June 12, 2025
Tweet
Share
More Decks by iret.kumoben
See All by iret.kumoben
第170回 雲勉 Lyria が切り拓く音楽制作の未来
iret
1
22
第169回 雲勉 AWS WAF 構築 RTA
iret
0
32
第168回 雲勉 JITNAの使い方とハマったポイントについて語る回
iret
0
35
第167回 雲勉 エージェント開発を加速する Agent Development Kit 入門
iret
1
42
第166回 雲勉 コードを読んで理解する AWS Amplify Gen2 Backend
iret
0
43
第165回 雲勉 Google Agentspace について
iret
0
41
第164回 雲勉 Agent Development Kit と MCP Toolbox for Databases で MCP 連携してみた
iret
1
87
第162回 雲勉 比較して学ぶ AWS Amplify Gen 2
iret
0
52
第161回 雲勉 Amazon Kinesis Data Streams と Amazon Data Firehose を使ってみよう
iret
0
51
Other Decks in Technology
See All in Technology
ZOZOTOWNの大規模マーケティングメール配信を支えるアーキテクチャ
zozotech
PRO
0
160
Amazon GuardDuty での脅威検出:脅威検出の実例から学ぶ
kintotechdev
0
100
AI時代の経営、Bet AI Vision #BetAIDay
layerx
PRO
1
2k
AIに頼りすぎない新人育成術
cuebic9bic
3
230
GMOペパボのデータ基盤とデータ活用の現在地 / Current State of GMO Pepabo's Data Infrastructure and Data Utilization
zaimy
3
210
【新卒研修資料】数理最適化 / Mathematical Optimization
brainpadpr
26
13k
Google Cloud で学ぶデータエンジニアリング入門 2025年版 #GoogleCloudNext / 20250805
kazaneya
PRO
20
4.8k
大規模イベントに向けた ABEMA アーキテクチャの遍歴 ~ Platform Strategy 詳細解説 ~
nagapad
0
220
薬屋のひとりごとにみるトラブルシューティング
tomokusaba
0
260
金融サービスにおける高速な価値提供とAIの役割 #BetAIDay
layerx
PRO
1
820
Intro to Software Startups: Spring 2025
arnabdotorg
0
240
Lambda management with ecspresso and Terraform
ijin
2
160
Featured
See All Featured
Writing Fast Ruby
sferik
628
62k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
GitHub's CSS Performance
jonrohan
1031
460k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
Building an army of robots
kneath
306
45k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
Music & Morning Musume
bryan
46
6.7k
Faster Mobile Websites
deanohume
308
31k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
Fireside Chat
paigeccino
38
3.6k
Code Review Best Practice
trishagee
69
19k
Transcript
第163回 雲勉 CircleCIで複数リポジトリ間の パイプラインを連携する
講師自己紹介 2 ◼ 朝枝 知之(Asaeda Tomoyuki) • クラウドインテグレーション事業部 MSP開発セクション 第一G
• Webサービス開発企業で勤務後、2019年8月アイレット入社 • 昨年から少しずつ筋トレをして身体づくりに励んでいます。 • ご質問は YouTubeのコメント欄で受け付けております。 後日回答させていただきます!
CircleCI について 3 ◼ 対象の視聴者 • CircleCIの初級〜中級者 • パイプライン/ワークフロー/ジョブ/ステップ 等がわかる
• GitHub Actions など他のCI/CDサービスの利用者 CircleCIはGitHubやBitbucketと連携し、コードの変更に応じてビルドやテスト、デプロイを 自動実行できるCI/CDプラットフォームです。ワークフローや条件分岐を駆使した柔軟な運 用が可能です。 ここではCircleCIのジョブ内から他のパイプラインを実行する方法について紹介します。 1つのパイプラインでCI/CDの処理を完結させるだけでなく、異なるリポジトリにあるパイプ ラインを連携させることでより柔軟で効率的なCI/CDのワークフローを実現できます。
アジェンダ 4 1. ユースケース 2. 準備とイメージ 3. 実装手順 4. 注意点
アジェンダ 5 1. ユースケース 2. 準備とイメージ 3. 実装手順 4. 注意点
1. ユースケース 6
1.ユースケース 7 ◼ その① マイクロサービスの分割管理 • 連携テストや統合デプロイ あるサービスのビルドやテストが完了したタイミングで、依存する他サービスのパイプラインを自 動的にキック リポジトリA
パイプライン リポジトリB パイプライン
1.ユースケース 8 ◼ その② マイクロサービスの分割管理 • コードの再利用 共通ライブラリ用リポジトリで変更があった場合、依存する複数のリポジトリのパイプラインを一 斉に実行する リポジトリA
パイプライン リポジトリB パイプライン リポジトリC パイプライン リポジトリD パイプライン
アジェンダ 9 1. ユースケース 2. 準備とイメージ 3. 実装手順 4. 注意点
2. 準備とイメージ 10
2.準備とイメージ 11 ◼ 今回例として作成するもの 1. パイプラインAのジョブからパイプラインBを実行 2. パイプラインBの実行中、パイプラインAは待機 3. パイプラインAのジョブがパイプラインBの実行結
果(成功 or 失敗)を取得 1. 成功の場合パイプラインAの後続のジョブを続行 し、失敗の場合パイプラインAも失敗で終了させる パイプラインA→BのキックはcurlによるPOSTリクエスト で実施します
2.準備とイメージ 12 ◼ 必要なもの① • CircleCIの パーソナルAPIトークン (後述) →「プロジェクトAPIトークン」ではない (“Project
not found” というエラーになる)
2.準備とイメージ 13 ◼ 必要なもの② • GitHubリポジトリ × 2つ (パイプラインのキック元とキック先)
アジェンダ 14 1. ユースケース 2. 準備とイメージ 3. 実装手順 4. 注意点
3. 実装手順 15
3.実装手順 16 ◼ 手順① APIトークンの準備 1. CircleCIのユーザー設定画面(User Settings)にアクセス 2. 「Personal
API Tokens」のセクションで新しいトークンを発行する 3. キック元のCircleCIプロジェクトで環境変数を新規作成する 1. 変数名を CIRCLECI_API_TOKEN_B とし、値に発行したAPIトークンを入れる
3.実装手順 17 ◼ 手順② 設定ファイル(config.yml)の作成 • リポジトリに config.yml がない場合は新規作成する •
0から始める場合は Faster がおすすめ
3.実装手順 18 ◼ 手順③-1 APIリクエストの実装 • パイプラインBをキックする部分 export CIRCLECI_PRJ_SLUG="github/t-asaeda/circleci-multi-repo-pipeline-b” RESPONSE=$(curl
-X POST https://circleci.com/api/v2/project/\\ $CIRCLECI_PRJ_SLUG/pipeline \\ -H "Circle-Token: $CIRCLECI_API_TOKEN_B" \\ -H "Content-Type: application/json" \\ -d '{ "branch": "main" }’) PIPELINE_ID=$(echo "$RESPONSE" | jq -r '.id')
3.実装手順 19 ◼ 手順③-2 APIリクエストの実装 • パイプラインBが完了するまで待機する部分 while true; do
STATUS=$(curl -s -H "Circle-Token: $CIRCLECI_API_TOKEN_B" \\ "https://circleci.com/api/v2/pipeline/${PIPELINE_ID}/workflow" | jq -r '.items[0].status') if [ "$STATUS" = "success" ]; then echo "Pipeline succeeded." break elif [ "$STATUS" = "failed" ] || [ "$STATUS" = "error" ] || [ "$STATUS" = "failing" ]; then echo "Pipeline failed with status: $STATUS" exit 1 else echo "Pipeline status: $STATUS. Waiting..." sleep 10 fi done
アジェンダ 20 1. ユースケース 2. 準備とイメージ 3. 実装手順 4. 注意点
4.注意点 21 ◼ APIトークンの管理 • APIトークンはCircleCIの Contexts やCircleCIプロジェクトの環境変数で安全に管理する • config.yml
には直接記述しない • 複数のCircleCIプロジェクトを連携させる可能性があれば Contexts に保存する ◼ エラーレスポンスの確認 • キックしたリクエストのレスポンスを echo して原因がわかるようにする
最後に 22 https://iret.media/149633 iret.media でも記事を公開しています