当前位置: 首页 > 知识库问答 >
问题:

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

昝宜
2023-03-14

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

slackSend(颜色:颜色代码,消息:摘要)

我想尝试到处玩,看看对象和属性。我很确定从Jenkins脚本控制台使用groovy是可能的。

共有1个答案

权玉泽
2023-03-14

我发现它通常需要查看源代码。在本例中,源代码位于GitHub上的jenkinsci/slack-plugin。

以下是我要做的步骤:

  • 查找“slackSend”用于描述步骤的位置 - 在SlackSendStep中。描述符
  • 所描述的类型具有向绑定公开的@DataboundSetter@DataboundConstructor(例如 setColor(字符串颜色)
  • 描述符构造函数返回 SlackSendStep.SlackSendStepExecution 的类类型
  • 具有 SlackSendStep.SlackSendStepExecution 类型一些注入的属性
  • 步骤执行在 run() 方法中完成

通过查看代码,我注意到的主要部分是创建了一个< code > StandardSlackService ,其中包含提供给该步骤的参数,可能来自全局Jenkins配置。

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

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

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);
}
 类似资料:
  • 我所说的“完全相同”是指脚本是相同的,但是脚本控制台和管道之间的DSL是不同的。例如,在脚本控制台中,我使用 而在管道中,我使用

  • 我在本地机器上的vbox上托管的ubuntu服务器上安装了openshift源(单节点集群),我需要使用其来自我的主机(客户端)的IP通过Web访问它,但它总是将我的IP重定向到本地主机172.0.0.1,如何克服这个问题?

  • 我需要从Jenkins作业中获取脚本路径。 请查看下面的屏幕截图,以便更清楚地了解需求。 我已经登录谷歌,获取了一些Groovy控制台脚本,其中列出了每个作业的详细信息。 通过使用jenkins.model.Jenkins.getJobNames()方法,我能够得到Jenkins中的所有作业,但实际上需要的是获得Scriptpath值,在每个作业中提到。 哪个Jenkins类/方法可以提供这些细节

  • 我附上了一张我想从Chrome控制台运行的点击操作的图片,并传递了各种值。该按钮在inspect元素的右上角以灰色突出显示。这是我想学习如何访问/使用的函数。 按钮元素位于

  • 是否可以从Linux终端访问开发者工具(Chrome/Firefox)控制台以进行脚本编写? 我试图从我的浏览器访问AngularJS应用程序的变量,这样我就可以快速浏览文件。例如,我可以要求,及其相关的,等;一旦我找到结果,我会在编辑器中打开该文件。 我正在探索的其他选择是使用某种无头浏览器。另外还有一个开发工具协议,它被木偶师等工具用来编程访问Chrome开发工具。 一个简单的节点REPL就足

  • 从jenkins脚本控制台,我如何启动一个工作的构建? 尝试过: 错误:groovy.lang.MisSingMEDORDION:没有方法的签名:hudson.model.FreeStyleProject.startBuild()适用于参数类型:()值:[]