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
Azure Pipelinesを使用したCICDベースラインアーキテクチャ実践
Search
yuriemori
July 17, 2024
Technology
0
870
Azure Pipelinesを使用したCICDベースラインアーキテクチャ実践
2024/07/16(水)にJapan Azure Users Groupで登壇させて頂いた際の資料です。
yuriemori
July 17, 2024
Tweet
Share
More Decks by yuriemori
See All by yuriemori
生成AI時代のセキュアコーディングとDevSecOps
yuriemori
0
120
JuniorからSeniorまで: DevOpsエンジニアの成長ロードマップ
yuriemori
2
460
生成AI時代だからこそ必要なDevSecOps:概念から実践例まで
yuriemori
1
130
信頼できる開発プラットフォームをどう作るか?-Governance as Codeと継続的監視/フィードバックが導くPlatform Engineeringの進め方
yuriemori
1
550
Azure Deployment EnvironmentsによるPlatform Engineering
yuriemori
0
130
Microsoft Build 2025_DevOps関連セッションレポート
yuriemori
1
170
生成AI時代のセキュアCI/CDとソース管理
yuriemori
1
260
Azure PipelinesによるCI/CDとデータベースデプロイの実践
yuriemori
0
81
Source Code Management in the Era of GenAI-Evolution Of DevOps
yuriemori
0
45
Other Decks in Technology
See All in Technology
なぜAWSを活かしきれないのか?技術と組織への処方箋
nrinetcom
PRO
5
980
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
3k
サイバーエージェント流クラウドコスト削減施策「みんなで金塊堀太郎」
kurochan
4
2.1k
『バイトル』CTOが語る! AIネイティブ世代と切り拓くモノづくり組織
dip_tech
PRO
1
130
「改善」ってこれでいいんだっけ?
ukigmo_hiro
0
340
Introduction to Bill One Development Engineer
sansan33
PRO
0
300
20251007: What happens when multi-agent systems become larger? (CyberAgent, Inc)
ornew
1
410
能登半島地震で見えた災害対応の課題と組織変革の重要性
ditccsugii
0
1k
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
3
20k
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.2k
カンファレンスに託児サポートがあるということ / Having Childcare Support at Conferences
nobu09
1
610
【Kaigi on Rails 事後勉強会LT】MeはどうしてGirlsに? 私とRubyを繋いだRail(s)
joyfrommasara
0
280
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
44
7.8k
Rails Girls Zürich Keynote
gr2m
95
14k
The Power of CSS Pseudo Elements
geoffreycrofte
79
6k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.7k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
600
Designing for humans not robots
tammielis
254
26k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
61k
GraphQLとの向き合い方2022年版
quramy
49
14k
The Cost Of JavaScript in 2023
addyosmani
55
9k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
620
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
The Language of Interfaces
destraynor
162
25k
Transcript
Azure Pipelinesを使用したCI/CDベー スラインアーキテクチャ実践 2024/7/16 yuriemori, yutakaosada
Agenda Introduction 今日話すこと 自己紹介 クラシックパイプライン以降のAzure Pipelinesの構成プラクティス
さよならクラシックパイプライン 主な変更点 変更後のYAMLベースのパイプラインのメリット ベースラインアーキテクチャをもとにしたYAMLベースでのAzure Pipelines構築 YAMLベースでのパイプラインの実装とデプロイ計画 Demo PR/CI/CDパイプライン Azure Key Vaultに格納したシークレットをパイプラインから参照する EnvironmentのApprovals&Checksによるデプロイターゲット環境へのデプロイの承認 まとめ
Introduction
今日話すこと クラシックパイプライン非推奨後のAzure Pipelinesの変更点 Azure Pipelinesのベースラインアーキテクチャに沿った構成とデプロイの制御 YAMLでのマルチステージパイプラインの構成
Azure Key Vaultを利用したパイプラインで使用するシークレットの管理
Yurie Mori(森 友梨映) DevOps Engineer @Avanade Japan お仕事
AgileとDevOpsの実践の支援 DevOpsソリューション( Azure DevOps/GitHub )の導入・構築 GenAI assisted with SDLC 技術スタック Azure DevOps, GitHub, Azure, .NET, C# Please follow me
Yutaka Osada(⾧田 豊) DevOps Engineer @Avanade Japan お仕事
Azureコンポーネントを活用したサービス構築 技術検証、パフォーマンスチューニングを得意とし、T-SQLが好き。 技術スタック C#, .NET, Azure(PaaS), Azure DevOps, Sitecore Please follow me
クラシックパイプライン以降のAzure Pipelinesの構成プラクティス
さよならクラシックパイプライン 2023年1月にAzure DevOpsでクラシックパイプラインの作成を禁止するリリー スが発表されました。 2023年3月以降に作成されるOrganizationではクラシックパイプラインの作成 はデフォルトでは無効になっており、YAMLベースのパイプライン構成が推奨と なります。 これが使えなくなります
主な変更点(1/2) クラシックリリースパイプライン無効後の Azure Pipelinesメニュー クラシックリリースパイプライン無効前の 組織のAzure Pipelinesメニュー GUIベースでパイプラインの作成 をサポートしていたこれらのメ ニューが消滅
パイプラインはビルド/リリース問わず YAMLファイルで構成するように
(最新)YAMLベースでのパイプラインで の代替手段 クラシックリリース パイプライン クラシックビルド パイプライン 概要 機能 Environmentでデプロイターゲットを指定 〇
× デプロイターゲットマシンの論理 セットを定義 デプロイグループ YAMLでデプロイジョブを定義 〇 × デプロイグループにリリースする ジョブを指定 デプロイグループ ジョブ EnvironmentでのApprovals&Checksを使用 〇 × リリースステージを完了する前の 外部の正常性シグナルの自動収集 と評価をサポート(アプリケー ションを特定の環境にデプロイす る前のチェック) リリースゲート YAMLファイルで再利用したいタスク群を テンプレートファイルとして定義する 〇 〇 一連のタスクを再利用可能な1つ のタスクにカプセル化 タスクグループ 主な変更点(2/2) クラシックパイプラインで使用できた機能で使えなくなるものたちとYAMLベースパイプラインでの代替手段
変更後のYAMLベースのパイプラインのメリット パイプラインをソースコードと同様にバージョン管理できる YAMLファイルはソースコードと同じリポジトリで管理できるため、変更履歴を追跡し やすく、過去のバージョンに簡単に戻すことができる。 レビューが容易になる ソースコードと同様に、変更をマージするためにPRを強制することで、悪意のある行
為者がパイプラインに悪意のあるステップを導入するのを防ぐことができる(ブランチ ポリシーを使用することでPRの強制ができる) リソースアクセス管理が可能 リソース所有者は、YAML パイプラインがリソースにアクセスできるかどうかを制御で き、別のリポジトリを盗むなどの攻撃の防止が可能となる。 承認とチェックにより、パイプラインの実行ごとに機能するアクセス制御が提供される。 セキュリティの向上 シークレットの露出防止: シークレットや機密情報をパイプラインファイルにハード コーディングすることなく、Azure Key Vaultなどのシークレット機構に格納された情報 をランタイムパラメーターとして動的に渡すことができるため、リポジトリに機密情報 が含まれるリスクの軽減が可能となる。 参考:https://devblogs.microsoft.com/devops/disable-creation-of-classic-pipelines/
ベースラインアーキテクチャをもとにしたYAMLベー スでのAzure Pipelines構築 参考:https://learn.microsoft.com/ja-jp/azure/devops/pipelines/architectures/devops- pipelines-baseline-architecture?view=azure-devops
demo
デモでお見せするもの PR/CI/CDパイプライン Azure Key Vaultに格納したシークレットをパイプラインから参照する EnvironmentのApprovals&Checksによるデプロイターゲット環境へのデプロイの承認 ベースラインアーキテク
チャのここの部分
demo architecture Azure Azure DevOps Managed Id App Service Dev
Env App Service Staging Env Azure Repos Azure Pipelines Environments Library Pipelines PR Pipeline CI/CD Pipeline Key Vaultよりシークレット情報 を取得 Completed 1 2 5 4 Defender for Cloud DevOps Key Vault Secret Environmentsに定義した環境に対応する App Serviceに対する承認チェック Analize stageによる セキュリティチェック Azure DevOps for Workload identity 承認プロセスが構成された環境へのデプロイは、 承認者からの承認されるまで実行されない Pull request Approved 3 Developer Reviewer Service connection 6 7 Pull Request作成時にPR Pipelineを起動
☆ポイント AzDO⇔Azure間接続 サービスコネクション(workload identity) Pipelines Library(Key Vaultへの接続)
Pipelines Environments(デプロイターゲットの定義) PR・CI/CD Pipelinesの構築 パイプラインの実行許可 Approvalチェックの指定 ブランチポリシーへPRパイプラインを指定 ソースコード変更し、Pull Request PR パイプラインを起動 ソースコードApprove→CI/CD起動→完了後タブの説明
ベースラインアーキテクチャをもとにしたYAMLベースでの Azure Pipelines構築 – PR Pipeline PR Pipelines
PR作成をトリガーとするパイプライン 以下を実行 コード解析(Linterによるフォーマットチェック、静的コード解 析によるセキュリティチェック) 依存関係の回復 ビルド 単体テストの実行 PR作成時に上記の様々なチェック/テストを実行するため、 レビュアーのレビュー負担を軽減することができる これらの処理が失敗した場合、PRはマージできないため、問 題のあるソースコードが⾧命ブランチに混入するのを早期に 防ぐことができる PR作成をトリガーにするこのパ イプラインのみ、トリガーは チェック対象のブランチ設定 >Build Validationで設定する
CI Pipelines 特定のブランチへのpushをトリガーとするパイプライン 以下を実行 PR Pipelineで実行していた処理内容
+ 結合テスト/UIテスト(ここで使用するシークレットをAzure Key Vaultから参照してテストを実 行) ビルド成果物の発行 ソースコードをリリース可能な状態にする CD Pipeline ビルド成果物のダウンロード 受入テスト 各環境へのデプロイを実行する 本番環境など重要な環境へのデプロイに関してはApprovals & Checksでデプロイ前の承認を 構成する(クラシックリリースパイプラインにおけるリリースゲートの役割) これらのCI,CD Pipelineは1つのYAMLファイルでマルチステージパイプラインとして構成 する(CDを分けるとエージェントが異なってしまうのでCIで作成した成果物のDLができ ない) ベースラインアーキテクチャをもとにしたYAMLベースでの Azure Pipelines構築 – CI,CD Pipeline
見せられないよ Azure Key Vaultへのサービスコ ネクションの名称を指定 Azure Key Vaultの名称を指定 Azure Key
Vaultで格納されてい るシークレットの名称 ベースラインアーキテクチャをもとにしたYAMLベースでのAzure Pipelines構築 - パイプラインで使用するAzure Key Vaultのシークレットの設定
Pipelines>Environmentでデプロ イする環境を指定 重要な環境へのデプロイの前に 承認プロセスを設定し、意図し ないデプロイを防ぐ ベースラインアーキテクチャをもとにしたYAMLベースでの Azure Pipelines構築 - デプロイ環境の定義と承認の構成(1/2)
承認プロセスが構成された環境 へのデプロイは、承認者からの 承認されるまで実行されない 承認者に対してはデプロイの直 前にこんな感じで承認してくだ さい通知がいく ベースラインアーキテクチャをもとにしたYAMLベースでの Azure Pipelines構築 -
デプロイ環境の定義と承認の構成(2/2)
ポイント クラシックパイプラインからYAMLベースのパイプラインへ クラシックパイプラインでビルドパイプライン/リリースパイプラインとして 構成していたものはYAMLファイルでCI, CDの複数のステージを定義するマルチ ステージパイプラインとして実装する クラシックリリースパイプラインでのリリースゲート(リリース前の承認ゲー
ト)はEnvironmentでApprovals & Checksで構成する パイプライン内で使用するシークレットはLibraryでAzure Key Vaultを参照する ように設定する
まとめ
まとめ YAMLベースでパイプラインを作成することにより、パイプラインのバージョ ン管理とレビューが容易になる Azure Key Vaultを使用することでセキュアにCI/CDを実現 クラシックのビルド/リリースパイプライン→YAMLファイルでマルチステージ
パイプラインを構成(ので、ビルドパイプラインとかリリースパイプラインと いう概念はもはやなくなる?) デプロイ前の承認プロセスを構成することにより、重要な環境への意図しない デプロイを防ぐことができる
[Microsoft Learn - Azure Pipelinesのベースラインアーキテクチャ] https://learn.microsoft.com/ja-jp/azure/devops/pipelines/architectures/devops-pipelines-baseline-architecture?view=azure- devops [Microsoft Learn -
YAMLパイプラインとクラシックビルド、リリース パイプラインの機能一覧] https://learn.microsoft.com/ja-jp/training/modules/create-release-pipeline-devops/2-describe-azure-devops-capabilities [Microsoft Learn - 承認とチェックを定義する] https://learn.microsoft.com/ja-jp/azure/devops/pipelines/process/approvals?view=azure-devops&tabs=check-pass [Microsoft Learn - Azure DevOps を使用してマルチステージ パイプラインを作成する] https://learn.microsoft.com/ja-jp/azure/devops/pipelines/process/create-multistage-pipeline?view=azure-devops デモで利用したSrcは下記に配置しています。 https://github.com/yutaka-art/Baseline_Architectures References
クラシックパイプラインの非推奨に伴うAZ-400のラーニングパスの参照すべきドキュメントの変更点一覧は以下の記事に記 載しています。 https://zenn.dev/yuriemori/articles/0eee4d3713aa18 References