2010-04-07 47 views
5

在我的项目的生成日志,我可以看到这些属性:如何使用CruiseControlNet将集成属性传递给批处理文件?

<integrationProperties> 
    <CCNetProject>Gdet_T</CCNetProject> 
    ... 
    <LastModificationDate>4/6/2010 1:29:04 PM</LastModificationDate> 
    <LastChangeNumber>10841</LastChangeNumber> 
</integrationProperties> 

我想物业CCNetProjectLastChangeNumber传递给批处理文件。 它可以与CCNetProject,一起使用,因为它可以在批处理中用作环境变量%CCNetProject%

但它不与其他属性(那些没有开始与CCnet前缀)作为LastChangeNumberLastModificationDate工作。

我试图将它作为参数传递,但它失败!

<exec> 
    <executable>$(WorkingFolderBase)\MyBatch.bat</executable> 
    <baseDirectory>$(WorkingFolderBase)\</baseDirectory> 
    <buildArgs>$(LastModificationDate)</buildArgs> 
</exec> 

我试图把它作为环境变量,但它未能:

<exec> 
    <executable>$(WorkingFolderBase)\MyBatch.bat</executable> 
    <baseDirectory>$(WorkingFolderBase)\</baseDirectory> 
    <environment> 
    <variable> 
     <name>svn_label</name> 
     <value>"${LastModificationDate}"</value> 
    </variable> 
    </environment> 
</exec> 

结果始终是相同的,当我显示参数或变量:空字符串或变量名$(svn_label)

我确定它很简单,但是...我找不到!任何想法 ?

+0

你混了环境变量和参数的例子。 – 2010-04-07 16:46:45

+0

对!我修好了它。 – TridenT 2010-04-07 17:12:11

回答

0

好的,找到了解决办法。 需要使用称为SvnRevisionLabeller的特定标签检索svn修订版。 然后通过CCNetLabel environement变量可用。

http://code.google.com/p/svnrevisionlabeller/

<labeller type="svnRevisionLabeller"> 
    <url>http://mysvnrootproject/trunk</url> 
</labeller> 
+0

这有点奇怪,但我会接受我的回复:) 谢谢你帮助我,这是非常有用的调查。 – TridenT 2010-05-05 21:13:55

8

CCNET将下列参数传递到外部程序:

CCNetArtifactDirectory 
CCNetBuildCondition 
CCNetBuildDate 
CCNetBuildTime 
CCNetFailureUsers 
CCNetIntegrationStatus 
CCNetLabel 
CCNetLastIntegrationStatus 
CCNetListenerFile 
CCNetModifyingUsers 
CCNetNumericLabel 
CCNetProject 
CCNetProjectUrl 
CCNetRequestSource 
CCNetUser 
CCNetWorkingDirectory 

正如你可以看到LastIntegrationStatus例如可通过CCNetLastIntegrationStatus获得,但LastModificationDate例如没有相应的东西。

您可以通过<buildArgs><environment> CCNET配置你有上文提到的集成特性没有访问传递额外的参数。大多数以CCNET开头的人(包括我自己)都会尝试类似<buildArgs>$(CCNetProject)</buildArgs>的东西并且失败。

看看我的answer to a similar question

对不起,我不能提供更好的解决方案。

更新(关于Thinker's suggestion):

使用$[$CCNetLabel] CCNET配置里面似乎并没有工作。

坦率地说,如果有的话,我会感到很惊讶。配置是静态的,而CCNetLabel是动态的,可能随每个集成构建而变化。假设您有权访问配置中的这些动态属性,配置可能随每个构建而改变。由于更改配置意味着自动重新启动CCNET服务器,因此每次构建都会导致服务器重新启动。实际上不是一个理想的行为,是吗?

+0

看着我提到的老问题,我发现这个答案的思想家:http://stackoverflow.com/questions/1563362/cruisecontrol-net-using-ccnetlabel-inside-ccnet-config-file/2299848#2299848。明天我会试试这个解决方案。 – 2010-04-07 17:15:08

+0

是的,我明天也会试试ccnet标签,以获得svn修订号 – TridenT 2010-04-07 19:55:01

+0

。不适合我。 – 2010-04-08 08:06:03

相关问题