在.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项目的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。用
调用msbuildmsbuild.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,你可以按照你喜欢的去做,这给了你一个很好的功能,因为你可以分配给不同的环境不同的代理和不同的管道,例如,我们在测试中只运行单元测试,所以我把最慢的代理用于该任务。