从Jenkins脚本控制台访问Slack插件

问题描述 投票:2回答:1

我想知道是否可以从Jenkins脚本控制台模拟管道插件操作。例如,Slack插件用于通过管道作业使用以下命令发送通知:

slackSend(color:colorCode,message:summary)

我想尝试玩,看看对象和属性。我很确定它可以使用Jenkins脚本控制台中的groovy。

jenkins groovy jenkins-pipeline
1个回答
1
投票

我发现它通常需要查看源代码。在这种情况下,源代码位于jenkinsci/slack-plugin的GitHub上。

以下是我要做的步骤:

我在查看代码时注意到的主要部分是使用提供给步骤的参数以及可能来自全局Jenkins配置创建的StandardSlackService

如果要从脚本控制台执行此代码,可以稍微调整和调整此代码,因为执行它的方式与管道路径相同。

以下是我认为相关的参考代码:

SlackService slackService = getSlackService(baseUrl, team, token, tokenCredentialId, botUser, channel);
boolean publishSuccess;
if(step.attachments != null){
    JsonSlurper jsonSlurper = new JsonSlurper();
    JSON json = null;
    try {
        json = jsonSlurper.parseText(step.attachments);
    } catch (JSONException e) {
        listener.error(Messages.NotificationFailedWithException(e));
        return null;
    }
    if(!(json instanceof JSONArray)){
        listener.error(Messages.NotificationFailedWithException(new IllegalArgumentException("Attachments must be JSONArray")));
        return null;
    }
    JSONArray jsonArray = (JSONArray) json;
    for (int i = 0; i < jsonArray.size(); i++) {
        Object object = jsonArray.get(i);
        if(object instanceof JSONObject){
            JSONObject jsonNode = ((JSONObject) object);
            if (!jsonNode.has("fallback")) {
                jsonNode.put("fallback", step.message);
            }
        }
    }
    publishSuccess = slackService.publish(jsonArray, color);
}else{
    publishSuccess = slackService.publish(step.message, color);
}
if (!publishSuccess && step.failOnError) {
    throw new AbortException(Messages.NotificationFailed());
} else if (!publishSuccess) {
    listener.error(Messages.NotificationFailed());
}
// rest of method...

// ...

//streamline unit testing
SlackService getSlackService(String baseUrl, String team, String token, String tokenCredentialId, boolean botUser, String channel) {
    return new StandardSlackService(baseUrl, team, token, tokenCredentialId, botUser, channel);
}
© www.soinside.com 2019 - 2024. All rights reserved.