やること
Webアプリケーション+WebJob なアプリケーションを Azure App Service に自動デプロイしたい!
ソースコードと App Service は↓な感じのものを想定する。
パイプラインを作る手順
まず全体像から。
基本的な考え方は、publish するときに App Service と WebJob(Kudu) のファイル・フォルダ構成に合わせて出力して、そのまま App Service にデプロイする、というもの。
テンプレートから作成する
Pipelines -> Builds -> New -> New build pipeline
Use the classic editor
リポジトリを選択
ASP.NET Core テンプレートを選択
これをベースにパイプラインを作る。
dotnet restore/build/test
特に変えなくてよい。
dotnet publish
WebJob と Web アプリケーション毎に publish のタスクを作る。
Job の publish
変更する箇所 | 変更内容 |
---|---|
Publish Web Projects | チェックを外す |
Zip Published Projects | チェックを外す |
Add project name to publish path | チェックを外す |
Path to project(s) | .csproj ファイルを明示的に設定するように変更する |
Arguments | outputパラメータを下記のように変更する |
--configuration $(BuildConfiguration) --output $(build.artifactstagingdirectory)/App_Data/jobs/triggered/{ジョブ名}
JobA 用のタスク
JobB 用のタスク
Web アプリの publish
変更する箇所 | 変更内容 |
---|---|
Zip Published Projects | チェックを外す |
Add project name to publish path | チェックを外す |
run.cmd と settings.job の作成
Powershell タスクを追加し、各ジョブの run.cmd と settings.job を作成するスクリプトを記述する。
※run.cmd と settings.job は、あらかじめ WebJob のプロジェクト直下に置いておいてもよい。その場合、この手順はスキップする。
変更する箇所 | 変更内容 |
---|---|
Type | Inlineに変更する |
Script | スクリプトを書く(サンプルとスクリーンショット参照) |
Advanced -> Working Directory | $(Build.ArtifactStagingDirectory) |
下記は1分毎に実行されるジョブの run.cmd と settings.job を生成するスクリプトのサンプル
"dotnet {モジュール名}.dll" | out-file App_Data/jobs/triggered/{ジョブ名}/run.cmd -Encoding ASCII;
"{`"schedule`": `"0 * * * * *`"}" | out-file App_Data/jobs/triggered/{ジョブ名}/settings.job -Encoding ASCII;
App Service のデプロイ
Azure App Service Deploy タスクを追加し、サブスクリプションや App Service 名等、必要な設定を入れる。
変更する箇所 | 変更内容 |
---|---|
Package or folder | $(Build.ArtifactStagingDirectory) |
Additional Deployment Options | Deployment method を Zip Deploy に設定 |
Publish Artifact
そのままでよい。
テスト実行
Save & queue するとパイプラインを実行できる。
Enable system diagnostics にチェックを入れるとログ出力が詳細になる。もし実行に失敗した場合はログを見て原因を特定する。
実行結果を確認
AzureポータルとWebサイトを見て、動いてることが確認できた!
おわり。
参考