2009-08-26 88 views
1

我们有一个CruiseControl.NET服务器1.5.0.4401运行。一个项目使用外部编译器,该编译器通过exec-task包含。该编译器被配置为将其输出写入位于工件目录中的文本文件中。文件名是keil_Revision-x.txt(x是版本号),而该文件的配置看起来像%ccnetartifactdirectory%\ keil_%ccnetlabel%.txt。包含构建输出作为附件

我们希望将此输出文件附加到CC为每个版本发送的电子邮件报告中。电子邮件出版商的配置(有点缩短)以下:

<email from="[email protected]" mailhost="zzz" mailport="25" includeDetails="TRUE" useSSL="FALSE"> 
    <users> 
     <!-- Here are some users --> 
    </users> 
    <groups> 
     <!-- Here are some groups --> 
    </groups> 
    <converters> 
     <!-- LDAP converter--> 
    </converters> 
    <modifierNotificationTypes> 
     <!-- Several notification types --> 
    </modifierNotificationTypes> 
    <subjectSettings> 
     <!-- Here are some subject settings -->   
    </subjectSettings> 
    <attachments> 
     <file>${CCNetArtifactDirectory}\keil_${CCNetLabel}.txt</file> 
    </attachments> 
</email> 

唯一的问题是,该文件没有附加。巡航控制台上的调试输出不包含任何错误消息。工件目录包含所有文件,只有它们没有附加。失败在哪里?

回答

2

是否可以在CCNET配置中使用像CCNetLabel这样的集成属性?我冒昧地怀疑这一点。直到CCNET 1.4.4 SP1他们没有。因此,请检查项目配置中的attachment节点,看看CCNetLabel是否已正确解决。

您需要定义常量预处理可这样更换集成特性:

<cruisecontrol xmlns:cb="urn:ccnet.config.builder"> 
    <cb:define project.artifact.dir="C:\foodir" /> 
    <project name="foo"> 
     <artifactDirectory>$(project.artifact.dir)</artifactDirectory> 
     ... 
     <publishers> 
      ... 
      <email 
       from="[email protected]" 
       mailhost="zzz" 
       mailport="25" 
       includeDetails="TRUE" 
       useSSL="FALSE"> 
       .... 
       <attachments> 
        <file>$(project.artifact.dir)\keil.txt</file> 
       </attachments> 
      </email> 
     </publishers> 
    </project> 
</cruisecontrol> 

您需要指示编译器写的结果,其名称由CCNET配置预见的文件。由于配置无法访问标签,因此它不能是文件名的一部分。如果要保留每个构建的结果文件不被覆盖,请添加一个可执行任务,以触发一个简单的批处理文件,其目的是将%ccnetartifactdirectory%\keil.txt复制到%ccnetartifactdirectory%\keil_%ccnetlabel%.txt

否则,this question的答案也可能对此有所帮助。

+0

如上所述,我们正在运行1.5.0,并且只要文件被正确标记并保存在工件目录集成属性中似乎正在工作。包含详细信息已被设置为TRUE。我个人的怀疑是括号$ []是错误的。但是,$ []和$ {}都不能完成这项工作。 – PVitt 2009-08-26 09:19:57

+1

正如我所说:$ {CCNetLabel}完全不起作用 - 假设1.5在这一点上的行为如同1.4.4。集成属性在CCNET配置中不可访问。您需要为此目的定义一个自己的预处理器常量。 – 2009-08-26 10:03:16

+0

好的,那么我们有下一个问题:当我们使用正常的文件名,例如keil.txt,正如你所建议的那样,CruiseControl会打开这个文件并且永远不会关闭它,所以不能被覆盖。只是这导致我把CCNetLabel放在文件名中。 也许我应该把这个开放/封闭的东西作为CC的错误。 – PVitt 2009-09-01 07:24:28