我们正在运行CruiseControl.NET Server 1.5.0.4401。一个项目使用外部编译器,它通过exec-task包含在内。此编译器配置为将其输出写入位于工件目录中的文本文件。文件名为keil_Revision-x.txt(x为修订号),而此文件的配置类似于%ccnetartifactdirectory%\ keil_%ccnetlabel%。txt。
我们希望将此输出文件附加到CC为每个版本发送的电子邮件报告中。电子邮件发布者的配置(稍微缩短)以下内容:
<email from="buildmaster@xxx.yy" 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>
唯一的问题是,文件未附加。巡航控制台上的调试输出不包含任何错误消息。工件目录包含所有文件,只有它们没有附加。失败在哪里?
答案 0 :(得分: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="buildmaster@xxx.yy"
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的答案也可能对此有所帮助。