GitHub などのソース管理システムから Web Apps にアプリケーションをデプロイする場合、自動的に Web Apps が認識してくれますが、同時に WebJobs をデプロイするといった機能はありません。
実際にドキュメントには Web アプリケーションのことしか書いてないです。
Deploy from local Git repo - Azure App Service | Microsoft Learn
しかし WebJobs のみをデプロイする場合には、Web Apps がコンソールアプリケーションを自動的に認識して WebJobs としてデプロイしてくれます。
このあたりは中の人がブログで紹介してくれていますので、そっちを参照してください。
Git deploying a .NET console app to Azure using WebJobs
現実的に Web アプリケーションと WebJobs は同じリポジトリに入れて、同時に Web Apps へデプロイしたいと思います。実際にそう思ったのでカスタムデプロイスクリプトで解決します。
まずは Kudu が生成した、典型的な WebJobs をデプロイするスクリプトを拾ってきました。
echo Handling .NET Console Application deployment. :: 1. Restore NuGet packages IF /I "WebJobDeploy.sln" NEQ "" ( call :ExecuteCmd nuget restore "%DEPLOYMENT_SOURCE%\WebJobDeploy.sln" IF !ERRORLEVEL! NEQ 0 goto error ) :: 2. Build to the temporary path call :ExecuteCmd "%MSBUILD_PATH%" "%DEPLOYMENT_SOURCE%\WebJobDeploy\WebJobDeploy.csproj" /nologo /verbosity:m /t:Build /p:Configuration=Release;OutputPath="%DEPLOYMENT_TEMP%\app_data\jobs\continuous\deployedJob" /p:SolutionDir="%DEPLOYMENT_SOURCE%\.\\" %SCM_BUILD_ARGS% IF !ERRORLEVEL! NEQ 0 goto error :: 3. Run web job deploy script IF DEFINED WEBJOBS_DEPLOY_CMD ( call :ExecuteCmd "%WEBJOBS_DEPLOY_CMD%" ) :: 4. KuduSync call :ExecuteCmd "%KUDU_SYNC_CMD%" -v 50 -f "%DEPLOYMENT_TEMP%" -t "%DEPLOYMENT_TARGET%" -n "%NEXT_MANIFEST_PATH%" -p "%PREVIOUS_MANIFEST_PATH%" -i ".git;.hg;.deployment;deploy.cmd" IF !ERRORLEVEL! NEQ 0 goto error
やっていることはシンプルで、NuGet パッケージの復元後にプロジェクトをビルドし、KuduSync を使って wwwroot 以下にコピーという流れになります。WEBJOBS_DEPLOY_CMD の実行は hostingstart.html を書き換えるだけなので、大した意味はありません。
重要なのは MSBuild でテンポラリにビルド結果を出力している部分です。App_Data 以下に出力するので、そのまま Web アプリケーションのデプロイスクリプトに組み込むだけで動いてくれそうです。
:: 2. Build to the temporary path call :ExecuteCmd "%MSBUILD_PATH%" "%DEPLOYMENT_SOURCE%\WebJobDeploy\WebJobDeploy.csproj" /nologo /verbosity:m /t:Build /p:Configuration=Release;OutputPath="%DEPLOYMENT_TEMP%\app_data\jobs\continuous\deployedJob" /p:SolutionDir="%DEPLOYMENT_SOURCE%\.\\" %SCM_BUILD_ARGS% IF !ERRORLEVEL! NEQ 0 goto error
注意点としてはソリューション、プロジェクトのパスと OutputPath に指定している名前です。デフォルトでは deployedJob という名前で固定されてしまうので、正しい名前に修正しておく必要があります。
Web アプリケーションのデプロイスクリプトに組み込んだサンプルを GitHub に公開しておきました。
https://github.com/shibayan/azure-webjobs-deploy
deploy.cmd が作成したカスタムデプロイスクリプトになります。このリポジトリを使って Web Apps にデプロイ後、ポータルからデプロイスクリプトの実行ログが見れます。
AzureWebJobsDeploy.Web と AzureWebJobsDeploy.Console の 2 つがビルドされていることが分かります。
ポータルから WebJobs の一覧を確認すると、先ほどデプロイした WebJobs が確認できます。
Kudu によって自動生成されたスクリプトでは continuous で固定でしたが、出力先ディレクトリを変更することで triggered にも変更可能です。
複数の WebJobs をデプロイする場合には、MSBuild 部分を増やすだけで対応できると思います。理想的には KuduScript 側で Web アプリケーションと WebJobs の同時デプロイを認識して、デプロイスクリプトを作ってもらいたいですね。