如何在签入VSO TFS存储库时更新Azure AppService中的文件夹

时间:2017-05-18 09:15:48

标签: azure web-applications deployment build azure-devops

我有一个托管为天蓝色网络应用的网站。这是一个在vs解决方案中的asp.net网站。在该网站的文件夹是我的产品文档,所有这些都是静态资源(html和图像)。这些静态资源位于另一个 vs解决方案的文件夹中(这是实际的产品解决方案)。这两种解决方案都是基于VSO的TFS。

截至目前,我在网站的上下文中运行了一个webjob,它基本上在文档文件夹上执行“tfs get”并将其内容放入网站上的文档文件夹中。这是有效的,但是,网站运行的vms确实经常更改,并且创建工作空间的机制绑定到计算机,而不是磁盘驱动器。因此,我不能只获得更改,但我必须始终获得所有内容,现在大约需要20分钟,并在网站上创建不必要的负载。 (这就是为什么我每周只运行一次这个webjob。)

现在我正在寻找更好的方法来做到这一点。我想只获取已更改的文件,使其速度更快,让cpu /驱动器变得昂贵。

我没有找到在Web服务器上创建工作区的方法,每次web服务器vm更改时都不会消失。 (如果有可能以某种方式将工作区附加到驱动器而不是机器名称,那将解决问题。)

我还在查看我为产品解决方案运行的继续构建定义。作为其中的一部分,我认为可能会创建一个部署文档文件夹被复制到app services的文档文件夹。这样我可以摆脱“特殊”webjob,但我仍然每次都复制所有文档文件。 (另外,它的构建代理在内部运行,所以当它们实际上已经存在于内部时,我还必须将这些文件从前提复制到云中。)。所以基本上,我不认为这个选项对我的情况有很多用处。

显然,如果我将静态文档资源从产品解决方案移动到网站解决方案,我可以简单地使用可用于从vso到azure web app的网站项目的自动部署。遗憾的是,由于各种其他原因(其中一个原因是静态资源部分是从产品解决方案中的.cs源自动创建的),我根本无法将docs文件夹从产品解决方案移动到网站解决方案。

那么有人建议我可以根据相应VSO文件夹中的更改更新Web应用程序中的文档文件夹吗?

2 个答案:

答案 0 :(得分:1)

您可以使用Kudu API将更新的文件上传到Azure应用服务。 简单的步骤:

  1. 创建持续集成构建
  2. 选中“允许脚本访问选项选项卡中的OAuth令牌”选项
  3. 将PowerShell步骤/任务添加到check the changes with REST API。 (请参阅Calling VSTS APIs with PowerShell
  4. 使用kudu api添加Azure PowerShell步骤/任务以将文件上传到应用服务。 (请参阅Remove files and folders on Azure before a new deploy from VSTS

答案 1 :(得分:0)

这是我最终做的事情:

  • 在VSO中创建了一个连接到" Web Hooks"的ServiceHook。每次签入时都会调用该挂钩,并根据我想要的目录进行过滤。 (所有这些都可以使用VSO中的现有功能来完成。)
  • 钩子调用Azure" functionapp" (这很容易做到,因为functionapps有一个" HttpTrigger"机制很适合这里。)
  • 钩子将checkins ChangeSet的id传递给函数app。
  • FunctionApp将该ID放入Azure(存储)队列。
  • 这会触发一个侦听该队列的azure webjob。该webjob使用ChangeSet-Id从VSO获取更改,并针对每个更改执行changetype。 (例如:下载或删除文件。)