在.net中使用Go CD

本文关键字:Go CD net | 更新日期: 2023-09-27 17:54:01

我想使用Go CD与。net Web API项目和Git。

我喜欢通过管道将特定的构建工件提升到某些环境的想法。目前我们使用的是TeamCity,并在Git中进行分支。我们使用MSBuild来构建和部署特定的配置转换(Test, Staging, Live)。

MSBuild命令行参数如下:

/p:Configuration=%DeployConfiguration% /p:Platform=AnyCPU /t:WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl=%DeployPath%
  • %DeployConfiguration%是每个环境的参数;Test, Staging, Live,并使用。net Config Transforms来转换Web。
  • %DeployPath%是每个环境下每个项目的参数。所以AuthAPI Live应该是这样的:''liveServer'path'to'AuthAPI' .
我的一个问题是:当构建工件被提升到管道中的下一个阶段时,如何使用特定的环境配置(使用。net配置转换)?例如,当构建提升到测试环境时,我想使用Web.Test。但是当升级到staging环境时,我想使用Web.Staging。配置等。

我还想知道你是否有使用。net项目的Go CD的经验?

在.net中使用Go CD

我没有在。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

有部分配置是特定于环境的(例如,对于Dev,QA, UAT, Production环境,您将有不同的db连接),然后有一些配置设置不会从一个环境改变到另一个环境,我们称之为应用程序特定的配置值。这样的例子可能是,你设置了一个日志组件,不管在什么环境应用程序中,你希望日志文件进入某个文件夹,c:'logs.

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

环境变量可以设置存储在操作系统环境变量,机器中。配置,已知文件位置等

这样你的应用程序只需要查询:Environment.GetEnvironmentVariable("MyAppDBName")
Dev, QA和Production环境/服务器将会有不同的答案。

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

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

我在我的组织中实现了这个过程,在你迁移到环境变量(这样你就避免提交包含密钥(安全泄漏)的配置文件)之后,在GoCD中有一个地方调用环境,这将允许你自定义你正在运行的管道。例如,在我的组织中,我有分期环境,测试环境,Prod,你可以按照你喜欢的去做,这给了你一个很好的功能,因为你可以分配给不同的环境不同的代理和不同的管道,例如,我们在测试中只运行单元测试,所以我把最慢的代理用于该任务。