やること
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サイトを見て、動いてることが確認できた!
おわり。
参考




















