Azure DevOps BlazorのPipelineからWebAppへCI/CDするYAML定義

Azure DevOps BlazorのPipelineからWebAppへCI/CDするYAML定義

Microsoftのアジャイルプロジェクト管理ツールには「Pipeline」という名称で自動ビルド・デプロイ (CI&CD)するツールが備わっています。
C#のSPAアプリケーションを作成するBlazorフレームワークをPipelineを使ってAzure WebAppへデプロイする方法を紹介します。

Pipelines

PipelinesではRepos (リポジトリ)にコミットされた内容をビルドするYAML定義を記載します。
.NetCore3.1の場合のYAML定義は以下の通りとなります。

例ではソリューション直下に「Web」ディレクトリプロジェクトを配置した構成のサンプルとなります。
Blazor単体のソリューション・プロジェクトであれば、Webディレクトリ階層は除きます。

CDに当たるデプロイのため、`PublishBuildArtifacts` としてアーティファクトに発行しています。
dotnet publishでzipを出力すれば良いと思いましたが、想定通りファイルが出力されないため、アーティファクトへ出力しています。

# ASP.NET Core
# Build and test ASP.NET Core projects targeting .NET Core.
# Add steps that run tests, create a NuGet package, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

variables:
  buildConfiguration: 'Release'

steps:
- task: UseDotNet@2
  displayName: ".NET Core 3.1.x"
  inputs:
    version: '3.1.x'
    packageType: sdk

- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    command: 'restore'
    restoreSolution: '**/*.sln'
    feedsToUse: 'select'

- task: DotNetCoreCLI@2
  inputs:
    command: 'restore'
    projects: '**/Web/*.csproj'
    feedsToUse: 'select'

- task: DotNetCoreCLI@2
  inputs:
    command: 'build'
    projects: '**/Web/*.csproj'
    arguments: '--configuration Release'

- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: True
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'

Release


ビルドされた出力ファイルをWebサーバーへデプロイするYAML定義を設定します。

Web画面上ではWebApp用のテンプレートが用意されている為、こちらを選択して設定していきます。
WebAppはPipelinesから自動作成されたりはしないため、Azure Portalから作成して紐づけます。

YAML定義


steps:
- task: AzureRmWebAppDeployment@4
  displayName: 'Deploy Azure App Service'
  inputs:
    azureSubscription: '$(Parameters.ConnectedServiceName)'
    appType: '$(Parameters.WebAppKind)'
    WebAppName: '$(Parameters.WebAppName)'
    packageForLinux: '$(System.DefaultWorkingDirectory)/**/drop/*.zip'
    StartupCommand: '$(Parameters.StartupCommand)'

AppServiceのランタイムのバージョンを要確認

AppService側で.NetCoreのバージョンを指定します。
.NetCoreでマイナーバージョンを含む最新のバージョンがリリースされていても、AppServiceですぐに使用できる訳ではありません。
AppServiceの実行バージョンとビルドするバージョンを一致させないとエラーとなります。

プログラミングカテゴリの最新記事