使用转换后的web.config post-publish更新Azure CSPKG

时间:2014-10-09 16:16:04

标签: powershell azure msbuild octopus-deploy web.config-transform

我的构建:

  1. 使用msbuild构建(/ t:build)
  2. 使用msbuild发布(/ t:发布)
  3. 包含nuget
  4. 使用章鱼部署
  5. 生成包含以下文件的工件(nuget包):

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

    cspkg是一个有效的可部署包。问题是它包含一个预转换的web.config,因为转换发生在部署时。请参阅transformsvariable substitution的八达通文档以供参考。

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

    我有powershell和完整的.net框架供我使用。

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

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

3 个答案:

答案 0 :(得分: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>

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

答案 1 :(得分:1)

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

我已经写了一篇关于八达通部署部分的详尽文章。 You can find it here: http://henrihietala.github.io/

答案 2 :(得分:0)

根据八达通支持论坛Brad Webber's post中包含的信息,我已经找到了如何做我需要的事情。

我发布了一个公共git repo,其中包含一个简单的示例解决方案和文档here