如果在提交日志中包含明确的单词,则在cc.net上运行构建

时间:2012-04-30 08:07:35

标签: svn msbuild nunit webdriver cruisecontrol.net

我有以下系统:

  • svn - 控制版
  • cc.net - 作为ci服务器
  • msbuild - 作为构建系统
  • nunit - 用于启动测试
  • webdriver - 用于网络测试。

现在我的测试在每次提交后自动运行。但是如果提交有#runautotest(或其他)注释,我希望我的测试运行。

我调查了cc.net的触发器,但它是为了另一个目标。 我试图找到一些关于cc.net解析日志的信息,但这没有积极的结果。

我应该用什么方法来解决我的问题?

2 个答案:

答案 0 :(得分:3)

在ccnet配置中,在项目中,位于任务块的顶部:

<modificationWriter>
 <filename>svn_mods.xml</filename>
 <path>c:\modsdir</path>
</modificationWriter>

这会将SVN修改写入文件。

在任务栏中接下来:

<nant>
 <executable>c:\path_to_nant</executable>
 <buildFile>mybuildfile.build</buildFile>
 <targetList>
  <target>conditionally_run_nunit_tests</target>
 </targetList>
</nant>

这将在修改编写器任务之后运行Nant任务。

conditionally_run_nunit_tests 中,搜索文件 c:\ modsdir \ svn_mods.xml 以查找 #runautotest 。如果找到它,请运行测试。如果你没有找到它,那么什么都不做。有多种方法可以解析mods文件。你可以使用C#脚本将整个文件读入一个字符串,然后调用包含传入#runautotest的包含。

以下代码是在Nant中使用C#脚本的示例。 SearchFile打开一个文件,将其读入一个字符串并检查字符串中是否有值。它返回“是”或“否”。以下脚本未经测试。

<property name="yesno" value="${ns::SearchFile("c:\modsdir\svn_mods.xml", "#runautotest")}"/>

<script language="c#" prefix="ns">
    <references>
        <include name="System"/>
        <include name="System.IO"/>
    </references>
    <code>
    <![CDATA[   
    [Function("SearchFile")]
    public static string SearchFile(string filepath, string token) 
    {
        System.IO.StreamReader myFile = new System.IO.StreamReader(filepath);
        string myString = myFile.ReadToEnd();
        myFile.Close();
        if(myString.Contains(token)) return "yes";
        else return "no";
    }               
    ]]>
    </code>
</script>

答案 1 :(得分:0)

正如问题的支持表明,这似乎是一个更重要的问题。我将试一试:据我了解设置,CCNET是leader of the pack,监控SVN以获取源代码更改,获取源代码,触发MSBuild构建它们并触发NUnit和WebDriver执行单元和Web测试

是否执行测试的决定取决于SVN修改注释中定义的#标签。一方面是SVN,另一方面是NUnit和WebDriver,只能通过CCNET连接。

首先,我要确保包含评论的这个标签在CCNET的某个地方可用。我不是SVN专家,但我认为所有评论都在CCNET修改日志中。你能核实一下吗?

接下来,测试的执行需要有条件。 CCNET的配置是一个相当静态的东西。随着CCNET 1.5中DynamicValues的出现和CCNET 1.6中ConditionalTasks的出现,配置变得更加动态,你现在也在CCNET中拥有控制流,但由于我有点过时了,我会提倡使用例如在构建脚本中包装测试执行MSBuild或NAnt并在其中放置修改日志评估。

更新:查看Adam's answer。这个例子非常接近我的想法(尽管我会使用<xmlpeek>代替<script>)。