4

我的构建:

  1. 使用 msbuild (/t: build) 构建
  2. 使用 msbuild 发布 (/t: 发布)
  3. 使用 nuget 打包
  4. 使用章鱼部署

生成一个包含以下文件的工件(nuget 包):

  • Azure.ccproj.cspkg
  • ServiceConfiguration.Production.csfg
  • Web.config(将在部署期间通过 Octopus 进行转换)

cspkg 是一个有效的、可部署的包。问题在于它包含一个预转换的 web.config,因为转换发生在部署时。有关转换变量替换的信息,请参阅 Octopus 文档以供参考。

如何使用部署包中的转换后的 web.config 覆盖 cspkg 中的 web.config?

我可以使用 powershell 和完整的 .net 框架。

或者,如果解压缩 cspkg、覆盖文件然后重新打包更有意义,我认为这是可以接受的。我也不知道该怎么做。

我知道Save-AzureServiceProjectPackage存在,但我无法让它运行并且缺少文档。

4

3 回答 3

1

我有一个包含 2 个步骤的 Octopus 项目:首先用于托管在 IIS 中的 Dev,其次用于托管在 Azure 中的 Prod。TeamCity 生产了 2 个 nuget 包:一个来自 OctoPack for Dev,另一个来自 NuGet Pack for Prod with cspkg。

我的 Azure.ccproj 中有这个目标:

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="Transform" BeforeTargets="BeforeBuild" Condition="'$(TEAMCITY_VERSION)' != ''">
  <PropertyGroup>
      <SourceTransformFile>..\Api\Web.config</SourceTransformFile>
      <TransformFile>..\Api\Web.Prod.config</TransformFile>
      <DestinationTransformFile>..\Api\Web.config</DestinationTransformFile>
  </PropertyGroup>
  <TransformXml
      Source="$(SourceTransformFile)"
      Transform="$(TransformFile)"
      Destination="$(DestinationTransformFile)" />
</Target>

该条件允许仅在构建服务器上运行,而不是在本地运行。

于 2014-10-09T17:52:40.283 回答
1

我通过将解决方案原样发送给 Octopus Deploy 解决了这个问题,这允许我在 Octopus 中运行 .config 转换。运行转换后,我使用自定义 powershell 脚本创建了 .cspkg 包。

我已经写了一篇关于章鱼部署部分的详尽文章。你可以在这里找到它:http://henrihietala.github.io/

于 2014-10-21T10:48:32.170 回答
0

根据八达通支持论坛Brad Webber 的帖子中包含的信息,我已经弄清楚了如何做我需要的事情。

我在这里发布了一个包含简单示例解决方案和文档的公共 git 存储库。

于 2014-10-09T21:10:50.270 回答