有没有一种方法可以让我的 Azure WebJob 自动部署,而无需每次都右键单击并选择“发布为 Azure WebJob”?即当我签入我的解决方案时,它会自动部署到 Azure 门户网络作业部分
4 回答
当我尝试实现这一点时,我发现目前还没有对 dotnet 核心项目的工具支持。提议的 webjobs.props/msbuild 解决方案都是特定于 dotnet 框架的。
但是,我还发现 webjob 可以是在本地机器上可执行的任何东西(可以是 node.js 或只是一个批处理命令)。
关键是要了解 WebJobs 是如何被宿主识别的:
- Windows 主机上的 WebJob(根据我从试验中收集到的信息)只是一个
run.cmd
包含有关如何启动 webJob 的说明的文件。对于 dotnet 核心dotnet MyDll.dll %*
(%*
从主机向下传递用于输出重定向等的参数)。 - 现在取决于作业是连续的还是触发的,
run.cmd
文件需要位于app_data/jobs/continuous/[NameOfJob]
或app_data/jobs/triggered/[NameOfJob]
。对于触发的作业,您还可以使用此处settings.job
所述的文件添加计划。 - 如果
run.cmd
在正确的位置有一个,它将被识别为一个 WebJob
现在无论运行时框架如何,都可以使用 VSTS 部署 webjob,请按照以下步骤操作:
- 如有必要,构建/发布您的 WebJob 以获取可执行文件
- 在包含正确启动说明的 webjob 可执行文件旁边添加一个 run.cmd 文件。如果需要,您也可以
settings.job
在此处添加。 - 创建文件夹层次结构
app_data/jobs/[triggered/continuous]/[nameOfJob]
并将可执行文件复制到最低的文件夹中。确保run.cmd
直接在[nameOfJob]/
目录下 - 压缩 app_data 文件夹,以便 zip 包包含整个层次结构
- 使用正常的 Azure 应用服务部署任务发布您的 zip 文件(就像部署 Web 应用程序一样)
就是这样。
是的你可以。
Brady Gaster 在一篇博文中写过这个(我自己没试过)。
据我所知,TL;DR;总结如下:
将名为 webjobs.props 的文件添加到要发布的 Web 应用程序项目或控制台应用程序的属性文件夹中
之后,编辑文件,使ManagementCertificate
,SubscriptionId
和PublishSettingsPath
填充正确的数据。
现在您应该可以使用命令发布文件了
msbuild WebJobDemo.Web.csproj /p:DeployOnBuild=true /p:PublishProfile=WebJobDemo /p:VisualStudioVersion=12.0 /p:Password=asdfasdf
(注意,帖子是为 VS2013 写的)
您当然可以在 VSTS(或任何其他构建/部署工具)中自动执行此操作,只要将某些内容签入到您的存储库。
关于如何通过命令行在 VSTS 中执行此操作的(相当完整的)答案可以在此答案中找到:https ://stackoverflow.com/a/45703975/352640
您可以通过持续集成构建来完成(签入后触发构建)。
关于部署 WebJob,您可以通过带有参数的Visual Studio Build任务生成包。/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.stagingDirectory)"
然后通过 Azure App Deployment 任务进行部署。
在 Visual Studio 中,为了与 Web 项目一起启用自动 WebJobs 部署,右键单击解决方案资源管理器中的 Web 项目,然后单击:添加 > 现有项目作为 Azure WebJob 并创建您的 WebJob。
更多细节可以在 MS 的一篇文章中找到 - webjobs-dotnet-deploy-vs