Azure DevOps の ビルドパイプラインとリリースパイプラインを使用して CI/CD を実現する
こちらのアドベントカレンダーの企画に参加させて頂きました🐤
はじめに
今回は、Azure DevOps のビルドパイプラインとリリースパイプラインを駆使して、CI/CD を実現する方法を解説していきたいと思います。特にリリースパイプラインに焦点を当てて進めたいと思います
アーキテクチャ構成というか全体像はこんな感じです。
Azure のコンポーネントは下記を利用します。
# | コンポーネント | 用途 |
---|---|---|
1 | Resource Groups | Azure ソリューションの関連するリソースを保持するコンテナ |
2 | Azure AppService | フルマネージド Web ホスティングサービス |
本記事の Azure AppService へデプロイするサンプル WebApp や、Azure DevOps PipelineのYamlファイルは、Gitに登録しています。
※サンプルアプリケーションはシンプルなASPで.NET Frameworkとしています。
前提事項
下記の前提事項を満たした状態で解説していきます。
- Azure DevOps のリポジトリに、サンプル WebApp が登録されていること。
※Azure DevOps の Organization は osatest
Project は Foxtrot
として進めていきます。
適宜ご自身の環境に合わせて差し替えてください。
- 空の Azure AppService が Azure 上に 構築されていること。
※リソースグループは rg-zenn-0361b5184af34f
AppService は app-zenn-0361b5184af34f-dev01
AppService プランは asp-zenn-0361b5184af34f-dev
として進めていきます。
適宜ご自身の環境に合わせて差し替えてください。
ビルドパイプラインの構築
リリースパイプラインを利用するにはビルドパイプラインが必要となります。
そのため、まずはビルドパイプラインを作成していきます。
Azure DevOps で Pipelines をクリックし、Create Pipeline をクリックします。
Azure Repos Git をクリックします。
今回は、App Service向けのビルドパイプラインを組みたいので、ASP.NET Core(.NET Framework) を選択します。
開かれたYamlに対して設定します。
各コマンドレットの内容については、コメントを書いています。
# ASP.NET Core (.NET Framework)
# Build and test ASP.NET Core projects targeting the full .NET Framework.
# Add steps that publish symbols, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core
trigger:
- main
# このパイプラインは、'main' ブランチに対する変更があった場合にトリガーされます。
pool:
vmImage: 'windows-latest'
# ビルドには最新のWindows VMイメージが使用されます。
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
# ビルドに使用される変数を定義します。ここではソリューションファイル、ビルドプラットフォーム、ビルド設定を指定しています。
steps:
- task: NuGetToolInstaller@1
# NuGet ツールをインストールします。
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
# NuGetを使用して、指定されたソリューションファイルの依存関係を復元します。
- task: DotNetCoreCLI@2
displayName: Build
inputs:
command: build
projects: '**/*.csproj'
arguments: '--configuration $(buildConfiguration)'
# .NET Core CLIを使用してプロジェクトをビルドします。ここでは、すべてのcsprojファイルに対してRelease設定でビルドを実行します。
- task: DotNetCoreCLI@2
inputs:
command: publish
publishWebProjects: True
arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
# プロジェクトをパブリッシュします。ビルド成果物はArtifact Staging Directoryに出力されます。
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)'
artifactName: 'webapp-artifact'
# ビルド成果物をパイプラインのアーティファクトとして公開します。これにより、後続のステップやジョブで使用可能になります。
Save and run で保存します。
これにより、ビルドが開始されます。
正常終了を確認してください。
Job に進むと、ビルドパイプラインがタスクの単位で期待通りに動作していることを確認できます。
リリースパイプラインの構築
ビルドパイプラインの正常終了を受けて、リリースパイプラインが起動するようにしていきます。
Azure リソースへのデプロイは、このリリースパイプラインで実行されます。
Dev、Staging、Prod など各環境に対してデプロイが必要な場合や、Dev → Starging の間に承認が必要な場合なども リリースゲート を利用してそれを制御することができます。
Releases をクリックし、New pipeline をクリックします。
最初にデプロイ時のテンプレートの選択が求められます。
ここでは Empty job をクリックします。
Stage name へ Deploy to test environment
と設定し、Save をクリックします。
クラシック形式はこのように、アプリケーションをどのようにリリースするかを定義するための、キャンバスのように可視化することができますね。
続いて、Artifacts を設定していきます。
ビルドパイプラインで作成した Artifacts を利用する必要があります。
Add an artifacts をクリックし、下記のように情報を設定します。
Project:ご自身の環境
Source(Build pipeline):ご自身の環境
Default version:Latest
Source alias:_ご自身の環境
続いて、稲妻マークをクリックし、Continuous deployment trigger を有効化します。
これにより、ビルドパイプラインの結果を受け取ることができます。
今度は Stage を定義していきます。 task をクリックします。
アプリケーションのリリースは、エージェント上で実行されることになります。
※リリースするためのコマンドを実行するマシンというイメージです。
Agent job の右側にある+ボタンをクリックし、Azure Web App を Add します。
サブスクリプションを指定し、認証ボタンをクリックします。
Azure subscription:ご自身の環境
App type:Web App on Windows
App name:asp-zenn-0361b5184af34f-dev01
Package or folder:$(System.DefaultWorkingDirectory)/**/*.zip
リリースパイプラインの名称を webapp-deployment
とし、Save をクリックします。
Pipeline タブをクリックし、Crate release をクリックします。
Create をクリックします。
ここまでの設定で、Webアプリのリポジトリにコード変更をコミットすると、ビルドパイプラインが起動し、ビルドパイプラインが特定のリリースパイプラインを起動し、Appservice へデプロイする、CICDの流れが実現できているはずです。
デプロイが成功していることを確認します。
AppService の URL へ接続し、正常に表示されるかを確認します。
おわりに
この記事では、Azure DevOps のビルドパイプラインとリリースパイプラインを利用して CI/CD を実現する方法を詳細に解説しました。初めにビルドパイプラインの設定方法を紹介し、その後リリースパイプラインを構築する手順を追いました。これにより、コードの変更がリポジトリにコミットされると、自動的にビルドが行われ、Azure AppService にデプロイされる一連の流れを実現できました。
このプロセスを通じて、CI/CD の基本原則と Azure DevOps の強力な機能を理解し、利用することができました。さらに、Azure のコンポーネントとして Resource Groups と Azure AppService を活用し、効率的で確実なソフトウェア開発ライフサイクルを構築する方法を学びました。最終的には、ビルドパイプラインとリリースパイプラインを使って、安全かつ迅速にアプリケーションをデプロイし、運用するための実践的なノウハウを提供することができました。
この記事が、Azure DevOps を使って CI/CD を実現したいと考えている方々にとって、有用なガイドとなれば幸いです。
References
Discussion