Cruisecontrol.net CCNetIntegrationStatus在“发布者”部分中使用时始终未知

Cruisecontrol.net CCNetIntegrationStatus在“发布者”部分中使用时始终未知,cruisecontrol.net,Cruisecontrol.net,我有一个使用CCNETV1.8.5运行的构建过程。构建完成后,无论是否成功,我都希望向Slack发送通知。我使用Slack的web钩子(见下文)处理通知,但我似乎无法通过CCNetIntegrationStatus属性获得当前构建的状态。在我的配置中使用$[$CCNetIntegrationStatus]的结果始终未知 我有一种预感,原因是这些CCNET集成属性(至少它们是我声明它们的方式)是在构建开始时处理和定义的。当然,当构建开始时,构建状态将是未知的 我也尝试过: $[CCNetInte

我有一个使用CCNETV1.8.5运行的构建过程。构建完成后,无论是否成功,我都希望向Slack发送通知。我使用Slack的web钩子(见下文)处理通知,但我似乎无法通过CCNetIntegrationStatus属性获得当前构建的状态。在我的配置中使用
$[$CCNetIntegrationStatus]
的结果始终未知

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

我也尝试过:

  • $[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>

邮递
$(slackUrl)
{{
“用户名”:“构建机器人”,
“icon_表情符号”::构建:“,
“附件”:[
{{
“回退”:“警告!新的生成方法!”,
“借口”:“警告!新的构建方法!”,
“颜色”:“D00000”,
“用户名”:“构建机器人”,
“icon_表情符号”:“构建”,
“字段”:[
{{
“标题”:“项目”,
“值”:“$[$CCNetProject]”,
“短”:正确
}},
{{
“标题”:“版本”,
“值”:“$[$CCNetLabel]”,
“短”:正确
}},
{{
“头衔”:“地位”,
“值”:“$[$CCNetIntegrationStatus]”,
“短”:正确
}},
{{
“标题”:“最后状态”,
“值”:“$[$CCNetLastIntegrationStatus]”,
“短”:正确
}},
{{
“标题”:“位置”,
“值”:“$(appUrl)”,
“短”:假
}}
]
}}
]
}}
5000

首先,我不得不嘲笑你尝试的变化,比如$(CCNetIntegrationStatus)。我是说真的吗?但你的直觉是正确的。ccnet配置代码是静态的。使其动态的唯一方法是从构建期间更改的文件中获取内容。这可以通过构建标签完成,但显然不能通过httpRequest完成


我会在Nant中使用url。这给了您更多的灵活性。您可以随时调用它。

我通过找到了一个解决方案。它通过一个自定义任务完成了我试图完全在CCNET配置语法中完成的任务。具体地说,通过实现自定义任务,可以正确获得当前的集成tatus。然后将其发送到我配置的空闲通道。另外一个好处是,我的CCNET配置也更简单


我始终无法100%确认我的预感,即在构建开始时会对CCNetIntegrationStatus属性进行一次评估。但是,考虑到我看到的行为,我认为情况确实如此。

可以注入动态值,为什么它还不能解析为我还不确定的值。请参见Doh!奇怪的变化是输入错误原始帖子。它已被修复。感谢您提供的信息,我需要进一步研究。Simon谈到的动态值将来自于在构建开始时设置的ccnet参数。我认为这对您没有帮助。@Adam Bruss有
直接动态值
可以让您替换任何运行时参数into字符串,因此可以使用此技术注入生成的任何ccnet环境变量。这些不是静态/常量值,每次生成都会发生替换。但是,@Adam您可能遇到了一个问题。如果替换发生在生成开始时,而不是在任务执行时,则会显示“sta”tic’like behavior;我不确定目前它是如何工作的。我知道我已经使用该技术将动态值引入到构建中,但必须承认,这些值是在构建开始时提供的。是否有任何其他替代品可以像
CCNetUser
或更重要的
CCNetLastIntegrationStatus
那样工作?请参见本页有关配置预处理器中就地替换的语法: