将构建输出包含为附件

时间:2009-08-26 08:27:14

标签: cruisecontrol.net

我们正在运行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>

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

1 个答案:

答案 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的答案也可能对此有所帮助。