【问题标题】:Force build in a time duration CCNet强制构建持续时间 CCNet
【发布时间】:2013-04-08 14:58:50
【问题描述】:

几天前,我有一个与巡航控制相关的意外项目。我花了一些时间才明白这个巡航控制系统到底是什么(我直到现在才知道 Land Cruiser)。

我们有一堆项目将在 Cruise Control 中按顺序构建。我们已经为此配置了一切。现在我的项目的一部分是在所有项目都构建完成后运行一个实用程序。由于项目将按固定顺序构建,我选择了最后一个项目(比如ProjectLast)进行跟踪。以下是项目构建后运行该实用程序的代码示例

<forcebuild>
    <project>MyUtility $(ccnet_branchlabel)</project>
    <integrationStatus>Success</integrationStatus>
    <enforcerName>ProjectLast $(ccnet_branchlabel)</enforcerName>
</forcebuild>

现在我只想在 14.00 到 18.00 之间的固定时间段内运行上述代码中的 MyUtility。有没有办法做到这一点?请帮助我理解这一点。谢谢。

这就是我想要的:当ProjectLast 构建成功完成并且时间在 14.00 到 18.00 之间时,MyUtility 应该触发,否则不会。

【问题讨论】:

    标签: triggers scheduled-tasks scheduling cruisecontrol.net


    【解决方案1】:

    我认为这应该大致符合您的要求(未经测试)。它应该在ProjectLast 处于状态Success(每30 秒检查一次)并且时间介于14:0018:00 之间(每60 秒检查一次)时触发构建。

    <multiTrigger operator="And">
      <triggers>
    
        <projectTrigger serverUri="tcp://server:21234/CruiseManager.rem" project="ProjectLast">
          <triggerStatus>Success</triggerStatus>
          <innerTrigger type="intervalTrigger" seconds="30" buildCondition="ForceBuild" />
        </projectTrigger>
    
        <filterTrigger startTime="14:00" endTime="18:00">
          <trigger type="intervalTrigger" seconds="60" />
          <weekDays>
            <weekDay>Sunday</weekDay>
          </weekDays>
        </filterTrigger>
    
      </triggers>
    </multiTrigger>
    

    cruisecontrol configuration(特别是triggers)的文档应该对所有可能性都有足够的解释。

    编辑:

    所以目前,你有一些东西(我想)看起来像这样:

    <project name="ProjectLast">
    
        <tasks>
    
            <!-- some build tasks etc etc -->
    
            <forcebuild>
                <project>MyUtility $(ccnet_branchlabel)</project>
                <integrationStatus>Success</integrationStatus>
                <enforcerName>ProjectLast $(ccnet_branchlabel)</enforcerName>
            </forcebuild>
    
        </tasks>
    
    </project>
    
    <project name="MyUtility">
    
        <tasks>
    
            <!-- whatever it is "MyUtility" does goes here -->
    
        </tasks>
    
    </project>
    

    我建议将配置更改为:

    <project name="ProjectLast">
    
        <tasks>
    
            <!-- some build tasks etc etc -->
    
        </tasks>
    
    </project>
    
    <project name="MyUtility">
    
        <multiTrigger operator="And">
          <triggers>
    
            <!-- the url here will obviously need to change to match your server -->
            <projectTrigger serverUri="tcp://server:21234/CruiseManager.rem" project="ProjectLast">
              <triggerStatus>Success</triggerStatus>
              <innerTrigger type="intervalTrigger" seconds="30" buildCondition="ForceBuild" />
            </projectTrigger>
    
            <filterTrigger startTime="14:00" endTime="18:00">
              <trigger type="intervalTrigger" seconds="30" />
              <weekDays>
                <weekDay>Sunday</weekDay>
              </weekDays>
            </filterTrigger>
    
          </triggers>
        </multiTrigger>
    
        <tasks>
    
            <!-- whatever it is "MyUtility" does goes here -->
    
        </tasks>
    
    </project>
    

    注意这里我们已经将项目MyUtility是否运行的决定移到MyUtility项目中,而不是ProjectLast

    【讨论】:

    • 请查看我的编辑问题。我认为您的代码与我的要求有所不同。请确认并感谢您的努力:)
    • @rapsalands:发布的代码应该符合您的编辑要求 - 只有当两个子触发器都为真时,构建才会运行。将他们的两个seconds 属性更改为类似 10 的值会使其投票以更快地完成项目。
    • 但是当我们每 10 或 30 秒触发一次事件时,它不会让构建服务器上的事情变慢吗?还有一个愚蠢的问题,我可以把你给的代码放在我代码的&lt;forcebuild&gt; 标记之间以使其工作吗?
    • @rapsalands:我想我可以看出哪里有误会 - 使用我发布的代码作为Myutility 项目的触发器,在该项目中,您可以启动可执行文件/执行其他任务等.
    • 我真的很抱歉,但你能解释一下吗?这个巡航控制对我来说真的很陌生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2011-05-30
    • 2010-09-29
    相关资源
    最近更新 更多