2

我想将Go CD与 .NET Web API 项目和 Git 一起使用。

我喜欢通过管道将特定构建工件推广到某些环境的想法。目前我们正在使用 TeamCity 并在 Git 中进行分支。我们使用 MSBuild 通过特定的配置转换(测试、暂存、实时)进行构建和部署。

我们的 MSBuild 命令行参数如下:

/p:Configuration=%DeployConfiguration% /p:Platform=AnyCPU /t:WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl=%DeployPath%
  • %DeployConfiguration%是每个环境的参数;测试、暂存、实时并使用 .NET Config Transforms 为指定环境转换 Web.config。
  • %DeployPath%是每个环境的每个项目的参数。所以 AuthAPI Live 会是这样的:\\liveServer\path\to\AuthAPI\.

我对此的一个问题是:当构建工件被提升到管道的下一阶段时,如何使用特定的环境配置(使用 .NET 配置转换)?例如,当构建提升到测试环境时我想使用 Web.Test.config,但是当提升到登台环境时我想使用 Web.Staging.config 等等。

另外我想知道你是否有使用 Go CD 和 .NET 项目的经验?

4

3 回答 3

0

我没有在 .NET 项目中使用 Go CD 的经验,但也许我的建议会有所帮助。

1.创建带有内容的TransformStaging.csproj文件:

<Project ToolsVersion="4.0" DefaultTargets="Transform" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Import Project="$(MSBuildProjectDirectory)\MSBuild\Microsoft.Web.Publishing.targets" />
    <Target Name="Transform">
        <Copy SourceFiles="$(Source)" DestinationFiles="$(Source).tmp"/>
        <TransformXml Source="$(Source).tmp" Transform="Web.Staging.config" Destination="$(Source)" />
    </Target>
</Project>

2.调用msbuild

msbuild.exe TransformStaging.csproj /p:Source=$configFilePath
于 2015-06-07T22:33:54.667 回答
0

Nermin Dibek指出了做事的正确方法,但我想在他的答案中添加一些更具体的内容。

我在我的组织中实现了该过程,并且在您迁移到环境变量之后(这样可以避免提交包含密钥(安全泄漏)的配置文件),在 GoCD 中有一个地方呼叫环境,允许您自定义管道,其中你在跑步。例如,在我的组织中,我有 Staging env、Testing env、Prod,您可以根据需要继续进行,这为您提供了一个很好的功能,因为您可以为不同的环境分配不同的代理和不同的管道,例如我们只运行在测试中进行单元测试,所以我为该任务放置了最慢的代理。

于 2017-04-25T18:29:02.000 回答
0

有部分配置是特定于环境的(例如,您将为 Dev、QA、UAT、生产环境提供不同的数据库连接),然后有一些配置设置不会从一个环境更改为另一个环境,让我们称之为应用程序特定的配置值。例如,您可能设置了一个记录器组件,而忽略了应用程序所在的环境,您希望日志文件转到某个文件夹 c:\logs。

我建议在您的 App.Config 文件中保留应用程序特定的设置(这些设置是使用 xcopy 从一个环境部署到另一个环境),但是那些特定于环境的设置,请取出。将环境配置的部署与您的应用程序部署分开。这些应该在构建/配置时部署到机器上。

环境特定变量可以设置存储在 OS 环境变量、Machine.config、已知文件位置等中。

这样,您的应用程序只需查询: Environment.GetEnvironmentVariable("MyAppDBName")
并且 Dev、QA 和生产环境/服务器将有不同的答案。

您将在每个环境中部署相同的二进制文件。

于 2016-03-11T19:46:44.500 回答