在publishers部分中使用时,CCNetIntegrationStatus始终为UNKNOWN

时间:2014-08-11 14:13:30

标签: cruisecontrol.net

我有一个使用CCNET v1.8.5运行的构建过程。当构建完成,成功与否时,我想向Slack发送通知。我有通知部分使用Slack的Web挂钩(见下文),但我似乎无法通过CCNetIntegrationStatus属性获取当前版本的状态。在我的配置中使用$[$CCNetIntegrationStatus]的结果始终为“未知”。

我有一种预感,原因是这些CCNET集成属性(至少是我声明它们的方式)在构建开始时被处理和定义。当然,当构建开始时,构建状态将是UNKNOWN。

我也尝试过:

  • $[CCNetIntegrationStatus],结果为空/空字符串。
  • $(CCNetIntegrationStatus),无法处理ccnet.config,找不到变量
  • $CCNetIntegrationStatus,结果是文字字符串$CCNetIntegrationStatus

最终,我想要实现的是在构建完成后发送HTTP请求(通知),其中包括当前构建集成状态,先前构建集成状态,版本号和项目名称。我该怎么做呢?

以下是示例配置:

<!-- block definition to send slack notification -->

<cb:define name="SlackNotificationBlock">
    <checkHttpStatus>
        <httpRequest>
            <method>POST</method>
            <uri>$(slackUrl)</uri>
            <body> {{
                      "username": "Build Bot",
                      "icon_emoji": ":build:",
                      "attachments": [
                        {{
                          "fallback": "Warning! A New Build Approaches!",
                          "pretext": "Warning! A New Build Approaches!",
                          "color": "#D00000",
                          "username": "Build Bot",
                          "icon_emoji": ":build",
                          "fields": [
                            {{
                              "title": "Project",
                              "value": "$[$CCNetProject]",
                              "short": true
                            }},
                            {{
                              "title": "Version",
                              "value": "$[$CCNetLabel]",
                              "short": true
                            }},
                            {{
                              "title": "Status",
                              "value": "$[$CCNetIntegrationStatus]",
                              "short": true
                            }},
                            {{
                              "title": "Last Status",
                              "value": "$[$CCNetLastIntegrationStatus]",
                              "short": true
                            }},
                            {{
                              "title": "Location",
                              "value": "$(appUrl)",
                              "short": false
                            }}
                          ]
                        }}
                      ]
                    }}
            </body>
            <timeout>5000</timeout>
        </httpRequest>
    </checkHttpStatus>
</cb:define>

<!-- my publishers block -->
<publishers>
    <xmllogger/>

    <cb:scope slackUrl="url-to-slack"
              appUrl="application-url">
        <cb:SlackNotificationBlock/>
    </cb:scope>

</publishers>

2 个答案:

答案 0 :(得分:0)

首先,我不得不轻笑你尝试的各种变体(CCNetIntegrationStatus)。我的意思是真的吗?但是你的预感是正确的.ccnet配置代码是静态的。使它成为动态的唯一方法是从文件中获取东西你在构建期间进行了更改。这可以使用构建标签完成,但不会显然使用httpRequest。

我会在Nant做网址。这为您提供了更大的灵活性您可以随时拨打电话。

答案 1 :(得分:0)

我通过CCNetSlackPublisher找到了解决方案。它通过自定义任务完成了我在CCNET配置语法中完全尝试做的事情。具体来说,通过实现自定义任务CCNetSlackPublisher能够正确获取当前的集成状态。然后它将它发送到我配置的松弛通道。另一个好处是我的CCNET配置也更简单!

我从来没有能够100%确认我的预感,即在构建开始时对CCNetIntegrationStatus属性进行一次评估。但是,鉴于我所看到的行为,我认为情况确实如此。