更好的方法来保持持续整合?

时间:2010-07-05 20:53:47

标签: msbuild continuous-integration cruisecontrol.net

我发现在添加新项目时,我总是调整和调整CI设置。虽然毫无疑问现有代​​码很少有变化带来的好处,但是新项目或volitile代码似乎需要更多工作,因为我必须将每个项目配置为“集成”以及维护不断增长的CCNET.config文件。是否有更好的策略,无法构建实用程序来管理添加和修改CI设置?

2 个答案:

答案 0 :(得分:3)

我做了一些事情试图控制它:

1)将配置文件拆分为两个。我有一个文件大部分保持不变并包含一组常量,例如

<?xml version="1.0" encoding="utf-8"?>
<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
  <!-- Constant definition used by the projecct config to prevent changes being required for each iteration -->
  <cb:define branch="branch name for source control"/>
  <cb:define ciserver="Server name in here"/>
  <cb:define devenv="Path to DEVENV"/>
  <cb:define nunit="Path to NUNIT"/>
  <cb:define cruisecontrol="Cruisecontrol Path"/>

  <!-- Include file to the standard CI project definitions. This file is kept under source control -->
  <cb:include href="config\CCProjects.config"/>
</cruisecontrol>

使用常量可以让您进行一次更改,并让它传播到配置文件中的每个任务。

请参阅docs

2)保存包含源代码管理项目的文件。项目文件作为SVN结帐的一部分进行更新。这有助于跟踪所做的更改,并让您回滚而不会有太多麻烦。

也许它已经到了CC.Net正在反对你而不是你的地步。我听说过有关其他CI服务器配置的简易性,例如Hudson,但它可能不适合您的构建环境。

答案 1 :(得分:1)

1 /根据需要拆分配置文件

例如,我有一个常量部分,每个项目都是一个包含,所以我可以独立更新每个项目相当并在项目中使用常量。

<强>的ccnet.config

<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
  <!-- Shared constants -->
  <cb:define WorkingFolderBase="D:\dev\ContinuousIntegration\WC" />
  <cb:define ArtifactFolderBase="D:\dev\ContinuousIntegration\Artifact" />
  <cb:define ConfigFolder="projects" />
  <cb:define SvnBasePath="http://myserver.com/svn" />
  <cb:define SvnUsername="Myusername" />
  <cb:define SvnPassword="MyPassword" />

  <!-- MyProject1  -->
  <cb:include href="projects/MyProject1.config"/>

  <!-- MyProject2  -->
  <cb:include href="projects/MyProject2.config"/>
</cruisecontrol>

<强> MyProject1.config

<project name="MyProject1" queue="Q1" queuePriority="1">
  <artifactDirectory>$(ArtifactFolderBase)\MyProject1</artifactDirectory>
  <workingDirectory>$(WorkingFolderBase)\MyProject1</workingDirectory>
  <!-- SVN implementation -->
  <sourcecontrol type="svn" username="$(SvnUsername)" password="$(SvnPassword)">
    <trunkUrl>$(SvnBasePath)/MyProject1/trunk/</trunkUrl>
    <workingDirectory>$(WorkingFolderBase)\MyProject1</workingDirectory>
  </sourcecontrol>
  [...]
</project>

2 /在CC.NET上使用版本控制(我建议整个安装)或配置文件。

3 / 保持简单!让批处理文件执行所有操作(编译应用程序,编译测试,运行测试,获取覆盖率,静态分析器,生成报告......)。