2015-06-06 29 views
2

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

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

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

/p:Configuration=%DeployConfiguration% /p:Platform=AnyCPU /t:WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl=%DeployPath% 
  • %DeployConfiguration%是为每个环境的参数;测试,分段,实时并使用.NET Config转换为特定环境转换Web.config。
  • %DeployPath%是每个环境的每个项目的参数。所以AuthAPI Live将如下所示:\\liveServer\path\to\AuthAPI\

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

另外我想知道如果您有任何使用.NET CD项目使用Go CD的经验?

+0

您是否也使用Go来构建? – whihathac

回答

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.Call的MSBuild与

msbuild.exe TransformStaging.csproj /p:Source=$configFilePath 
+0

MSBuild命令行为正确的环境(在TeamCity中指定为参数)执行配置变换。我只是想知道如何在Go CD使用构建工件(已转换的配置)时放置适当的配置文件? – Gaui

0

但是也有一些环境的具体配置的部分(你将有一个不同的数据库连接例如Dev,QA,UAT,生产环境),然后有配置设置不会从一个环境改变到另一个环境,我们可以调用这些应用程序特定的配置值。这些例子可能是你设置了一个记录器组件,并忽略你想要的日志文件转到某个文件夹c:\ logs中的环境应用程序。

我建议在你的App.Config文件中保留特定于应用程序的设置(这些设置从一个env部署到使用xcopy的其他设备),但那些是特定环境的部分。从应用程序部署中分离部署环境配置。这些应该在构建/配置时部署到机器上。

环境的特定变量,可以设置存储在操作系统环境变量,Machine.config中,已知的文件位置等

这样,你的应用程序只具有查询:Environment.GetEnvironmentVariable(“MyAppDBName”)
和DEV ,QA和生产环境/服务器将有不同的答案。

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

0

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

我实现的过程中我的组织和后迁移到环境变量(有了这个,你避免犯包含密钥(安全漏洞)的配置文件),在GoCD有一个地方通话环境这将允许您自定义您正在运行的管道。例如,在我的Org中,我有Staging env,Testing env,Prod,并且您可以继续尽可能多地继续,因为您可以为不同的环境分配不同的代理和不同的管道,例如我们只运行在测试中进行单元测试,所以我把最慢的代理放在那个任务上。