【问题标题】:How can I publish an Azure Cloud Services project with multiple sites on a single service using Visual Studio Team Services?如何使用 Visual Studio Team Services 在单个服务上发布具有多个站点的 Azure 云服务项目?
【发布时间】:2017-02-24 18:33:38
【问题描述】:

我有一个经典的云服务项目,它在单个服务上有多个网站,在 ServiceDefinition.csdef 中配置如下:

<WebRole name="PE.Roles.API" vmsize="Small">
    <Sites>
      <Site name="API" physicalDirectory="..\..\..\PE.Roles.API">
        <Bindings>
          <Binding name="http" endpointName="PE.API" />
        </Bindings>
      </Site>
      <Site name="PE.Services.Authorization" physicalDirectory="..\..\..\PE.Services.Authorization">
        <Bindings>
          <Binding name="http" endpointName="PE.Services.Authorization" />
        </Bindings>
      </Site>
    <!-- Etc -->
    </Sites>
</WebRole>

这会在 Visual Studio 2015 中正确编译和打包,并从预编译的 .cspkg 文件毫无问题地部署到云服务。

我们最近迁移到 Visual Studio Team Services for DevOps,我正在尝试使用提供的 Azure 云服务构建模板设置此解决方案以在云中构建和部署。

.sln 构建步骤正确完成,但 .ccproj 构建步骤失败并出现以下错误:

PE.Azure\bin\ServiceDefinition.csdef (0, 0)
PE.Azure\bin\ServiceDefinition.csdef(0,0): Error CloudServices079: Cannot find the physical directory 'D:\a\1\PE.Roles.API' for virtual path API/.
Process 'msbuild.exe' exited with code '1'.

我的构建参数是:/t:Publish /p:TargetProfile=$(targetProfile) /p:DebugType=None /p:SkipInvalidConfigurations=true /p:OutputPath=bin\ /p:PublishDir="$(build.artifactstagingdirectory)\\"

我发现许多博客文章和 SO 问题都涵盖了类似的问题,但没有一个能准确解决这个问题(过去几年也没有任何发布过)。

更新

我已经为该项目创建了一个 TFVC 存储库并实施了映射步骤,如下所示:

...但我仍然遇到同样的错误:

我需要做什么才能让它工作?

【问题讨论】:

标签: azure msbuild azure-devops azure-cloud-services


【解决方案1】:

您需要根据物理目录的设置修改源映射。

参考此示例进行修改:

<Site name="API" physicalDirectory="..\..\..\WebGeneralDemo">
        <Bindings>
          <Binding name="http" endpointName="WebGeneralDemo" />
        </Bindings>
      </Site>

更新:

如果这些项目在 git 存储库中,您可以将结构保留在存储库中,如下所示:

-回购

--AzureCloudServiceDemo

---AzureCloudServiceDemo

---WebRole1

--WebGeneralDemo

如果结构不是这样,可以使用Copy file task复制文件夹(包含文件)

更新

在这个具体问题的情况下,Repo 的原始结构如下:

...其中.ccproj 文件位于PE.Azure 文件夹中,而要发布的站点位于PE.Roles.API 文件夹中。

编译器在$(build.sourcesDirectory)(所以D:\a\1\上方的目录中查找站点内容,因此修复错误的正确复制文件任务是:

每个站点都需要一个复制文件任务,并且这些任务必须位于构建解决方案 ***.sln 步骤之后,但在构建解决方案 ***.ccproj 步骤之前。

【讨论】:

  • 感谢您的回复。这看起来正是我所需要的。在 VSTS 中哪里可以找到这些映射?
  • (明确一点:我正在使用 Git 源代码控制,而不是 TFS。Git 是否可以使用映射?)
  • @JcFx 由于您使用的是 Git 源代码控制,因此您可以将结构(查看我的答案)保留在您的存储库中。另一方面,您可以使用复制文件任务复制文件和文件夹以具有该结构。
  • 复制文件任务对我有用,一旦我找到了将文件复制到的正确路径 (../)。我已经接受了您的回答,并进行了更新,以便以后的任何人都更清楚。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多