我想将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 Config Transforms)?因此,例如,当构建升级到测试环境时,我想使用Web.Test.config,但是当提升到临时环境时,我想使用Web.Staging.config等。
此外,我想知道您是否有使用Go CD和.NET项目的经验?
答案 0 :(得分:0)
我没有使用Go CD和.NET项目的经验,但也许我的建议会有所帮助。
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
答案 1 :(得分:0)
部分配置是特定于环境的(例如,对于Dev,QA,UAT,生产环境,您将拥有不同的数据库连接),然后存在不会从一个环境更改为另一个环境的配置设置,我们调用这些特定于应用程序的配置这些示例可能是您设置了一个记录器组件,并忽略了您希望日志文件转到某个文件夹的环境应用程序,c:\ logs。
我建议在App.Config文件中保留特定于应用程序的设置(使用xcopy将这些设置从一个env部署到其他环境),但是那些特定于环境的设置会被取出。从应用程序部署中单独部署环境配置。这些应该在构建/配置时部署到机器上。
环境特定变量可以设置存储在OS环境变量,Machine.config,已知文件位置等中。
这样你的应用就必须查询:Environment.GetEnvironmentVariable(&#34; MyAppDBName&#34;)
而Dev,QA和Production环境/服务器将有不同的答案。
您将在每个环境中部署相同的二进制文件。
答案 2 :(得分:0)
Nermin Dibek 指出正确的做事方式,但我想补充更具体的答案。
我在我的组织中实施了该过程,并在您迁移到环境变量 之后(使用此功能,您可以避免提交包含密钥(安全泄漏)的配置文件) ,在GoCD中有一个地方叫环境,它允许您自定义正在运行的管道。例如,在我的Org中我有Staging env,测试env,Prod,你可以继续任意多个,这给你一个很好的功能,因为你可以为不同的环境分配不同的代理和不同的管道,例如我们只运行测试中的单元测试,所以我把最慢的代理用于该任务。