当前位置: 首页 > 知识库问答 >
问题:

使用VSTS部署Azure WebJob

戴鸿羽
2023-03-14

我在使用Visual Studio团队服务(VSTS)部署Azure WebJob时遇到一些问题。

WebJob似乎已成功部署,但它破坏了托管在同一应用程序服务中的Azure网站!如果使用VS2013进行部署,则不会出现此问题。

这是生成WebJob部署包的构建任务:

这是我的部署任务:

我部署Azure WebJob时没有出现错误。如果我去Azure门户网站,我会看到WebJob在那里,并且运行成功。WebJob文件按预期被复制到< code > wwwroot \ App _ Data \ jobs \ triggered \ removeexpireddis 文件夹中,但问题是其他一些文件将被复制到< code > wwwroot \ App _ Data \ bin 文件夹中,这将破坏已经部署到该应用服务中的现有网站!!!

所以我决定找出这一切发生的原因。下载并提取部署包后,我看到有两个文件夹(app_databin)和调度程序文件(settings.job):

这解释了为什么某些程序集被复制到应用程序服务的wwwroot\App_Data\bin中。奇怪的是,当从VS2013部署时,这不会发生!!!我查看了MSBuild日志,发现了以下行:

由于跳过指令“SkipBinFolderOnDeploy”,跳过了对象diPath([应用程序服务名称]\bin)。

最后,从 VSTS 部署 Azure Web 作业时包括 bin 文件夹,但从 VS2013 部署它时将其排除在外。

因此,我的问题是:如何防止在使用VST时部署<code>bin

共有3个答案

赫连鸿振
2023-03-14

我终于能够修复它,感谢@starain MSFT为我指明了正确的方向。不过,我不得不做一些小改动。这是创建部署包的任务:

MSBuild参数:

/p: DeployOnBuild=true /p: WebPublishmethod=FileSystem /p: DeployDefaultTarget=WebPublish /p: Configuration=$(BuildConfiguration) /p: OutputPath=.\bin\ /p: PublishUrl="$(build.artifactstagingdirectory)\temp\WebWork"

这里与@starain-MSFT答案的不同之处在于,我必须添加< code>/p:OutputPath=参数,否则我会得到以下错误:

没有为项目设置OutputPath属性

生成包后,我删除<code>bin

这是我的部署任务:

请注意,如前所述,$(DeploymentPackagePath) 是包含部署包的 zip 文件的路径。无论是否将包部署为 zip 文件,或者是否将其解压缩并部署文件夹,它都可以双向工作。

张嘉
2023-03-14

请参阅以下方法将 Web 作业部署到 Azure:

  1. 修改 Visual Studio Build 任务以使用 FileSystem 部署 webjob (MSBuild 参数: /p:DeployOnBuild=true /p:WebPublishMethod=FileSystem /p:publishUrl=“$(build.artifactstagingdirectory)\\WebJob” /p:DeployDefaultTarget=WebPublish
  2. 添加删除文件任务以释放定义以删除 bin 文件夹(源文件夹:$(System.DefaultWorkingDirectory)/WebJobVnext/drop/WebJob);内容:垃圾箱
  3. 修改 Azure 应用服务部署任务 (1.取消选中“使用 Web 部署发布”选项。2. 软件包或文件夹:$(System.DefaultWorkingDirectory)/[工件名称] /drop/WebJob
郑宏朗
2023-03-14

我也遇到了这个特殊问题的问题。

我发现的最新方法是使用Web Deploy操作设置,-skip:Directory=(在这种情况下将是-skip:Directory='\\bin ')当您在发布定义中创建azure deploy任务时(附加参数)。我发现这确实从更新操作中排除了bin文件夹(结果)。

如果这对你有任何帮助,请告诉我。

 类似资料:
  • 如何使用VSTS版本将war文件部署到运行Tomcat的Azure Web应用程序?我在VSTS设置中有一个CI/CD管道,在提交代码时进行构建,然后在构建完成时发布新的war文件并将其推送到Azure。问题是,war文件被部署到\site\wwwroot\webapps,而不是\site\wwwroot\bin\apache-tomcat-8.5.24\webapps,需要将其作为应用程序拉入t

  • 我的ant-script和Tomcat有问题。我想创建一个ant-scipt,它使用Jenkins在我的tomcat-server上构建、编译和部署我的GWT应用程序。为此,我使用来自catalina(catalina-ant.jar)的undeploy and deploy任务。但是我得到了这个错误: 构建失败d:\jenkins\jobs\homepageTomcat\workspace\BU

  • Fabric 是一个 Python 下类似于 Makefiles 的工具,但是能够在远程服务器上 执行命令。如果您有一个良好配置过的 Python 软件包 (大型应用) 且 对“配置”概念的理解良好,那么在外部服务器上部署 Flask 应用将会非常容易。 开始之前,请先检查如下列表中的事项是否都已经满足了: 在本地已经安装了 Fabric 1.0 。即这个教程完成时, Fabric 的最新版本。

  • Nuxt.js 允许你将静态化后的站点部署至任何静态站点托管服务中,例如 surge.sh。 部署至 surge.sh,需先安装 surge: npm install -g surge 然后, 我们需要告诉 Nuxt.js 生成应用的静态站点目录: npm run generate 上述的命令会生成一个 dist 目录,该目录包含了待部署的所有资源文件。 最后,我们可以通过下面的命令将站点布置至

  • 我正在测试Visual Studio Team Services新发布管理系统的预览版。我的场景是一个在VSTS托管Git回购的经典网站(ASP.NET 4.5)。如下所示,构建定义是成功的: 它被设置为发布为可以由Release Manager获取的工件,如下所示: 在发布管理器端,我将工件正确链接,如下所示: 在这里,您可以看到我的环境以及相关的任务(三个都是克隆) 当我运行构建发布的版本时,

  • 我希望运行一个服务,该服务将使用放入SQS队列中的消息。构建消费者应用程序的最佳方法是什么? 一种想法是创建一堆线程或进程来运行这个: 我倾向于单独的进程而不是线程来避免GIL。是否有一些容器进程可以用来启动和监视这些单独运行的进程?