我在使用Visual Studio Team Services(VSTS)部署Azure WebJob时遇到了一些问题。
WebJob似乎已成功部署,但它打破了同一App Service中托管的Azure网站!如果我使用VS2013进行部署,我没有这个问题。
这是我的构建任务,它生成WebJob部署包:
这是我的部署任务:
部署Azure WebJob时没有错误。如果我去Azure门户,我看到WebJob就在那里,它运行成功。 WebJob文件按预期复制到wwwroot\App_Data\jobs\triggered\RemoveExpiredDids
文件夹中,但问题是其他一些文件将被复制到wwwroot\App_Data\bin
文件夹中,这会破坏已部署到该App Service中的现有网站! !
所以我决定找出为什么会这样。下载并解压缩部署包后,我看到有2个文件夹(app_data
和bin
)和调度程序文件(settings.job
):
这解释了为什么有些程序集被应用到App Service的wwwroot\App_Data\bin
中。奇怪的是,从VS2013部署时不会发生这种情况!我查看了MSBuild日志,找到了以下行:
由于跳过指令'SkipBinFolderOnDeploy',跳过了对象dirPath([app service name] \ bin)。
结束时,从VSTS部署Azure WebJob时包含bin
文件夹,但从VS2013部署时不包括该文件夹。
所以我的问题是:如何防止在使用VSTS时部署bin
文件夹?是否有任何MSBuild参数/标志可以执行此操作?
答案 0 :(得分:3)
我也遇到过这个问题。
我发现的最新方法是在发布定义中创建azure deploy任务时使用Web Deploy Operation Settings,-skip:Directory =(在这种情况下,它将是-skip:Directory ='\\ bin') (附加论点)。我已经看到这确实排除了更新操作(result)中的bin文件夹。
如果这对您有任何帮助,请告诉我。
答案 1 :(得分:2)
请参阅以下方法将webjob部署到azure:
/p:DeployOnBuild=true /p:WebPublishMethod=FileSystem /p:publishUrl="$(build.artifactstagingdirectory)\\WebJob" /p:DeployDefaultTarget=WebPublish
)$(System.DefaultWorkingDirectory)/WebJobVnext/drop/WebJob
);内容:bin
)$(System.DefaultWorkingDirectory)/[artifact name] /drop/WebJob
)答案 2 :(得分:1)
我终于能够解决它,感谢@ starain-MSFT指出我正确的方向。不过,我不得不做一些小改动。这是创建部署包的任务:
MSBuild参数:
/ p:DeployOnBuild = true / p:WebPublishMethod = FileSystem / p:DeployDefaultTarget = WebPublish / p:Configuration = $(BuildConfiguration)/ p:OutputPath =。\ bin \ / p:publishUrl =" $( build.artifactstagingdirectory)\ TEMP \ WebJob"
与@ starain-MSFT答案的区别在于我必须添加/p:OutputPath=
参数,否则我会收到以下错误:
未为项目
设置OutputPath属性
生成包后,我删除bin
文件夹并压缩它(这会减少构建时间)。
这是我的部署任务:
请注意,$(DeploymentPackagePath)
是包含部署包的zip文件的路径,如前所述。如果将软件包部署为zip文件,或者解压缩并部署文件夹,它无关紧要。