【问题标题】:Check a plugin exists within a Jenkins Pipeline (Groovy)检查 Jenkins 流水线 (Groovy) 中是否存在插件
【发布时间】:2016-08-23 22:38:59
【问题描述】:

我想在我的管道中使用 Slack 通知插件,这非常简单:

slackSend color: 'danger', message: 'Everything broke'

但是,如果 slackSend 不存在,我不希望构建中断。有没有办法先检查一下?

【问题讨论】:

    标签: jenkins groovy jenkins-plugins jenkins-pipeline


    【解决方案1】:

    您也许可以将其包装在条件中,但我不确定 Jenkins 如何将内容添加到脚本中...

    if(this.respondsTo('slackSend')) {
        slackSend color: 'danger', message: 'Everything broke'
    }
    

    【讨论】:

    • 不幸的是,詹金斯不喜欢它Scripts not permitted to use staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods respondsTo java.lang.Object java.lang.String。我看到这种“不允许使用的脚本”有很多其他人似乎可以使用的东西,包括其他人使用的 currentBuild.rawBuild,所以我不知道我的管道是否配置正确。跨度>
    • 我想知道是否真的是 this 对象,你应该检查那个 respondsTo
    【解决方案2】:

    您始终可以使用旧的 try/catch 来确保您的构建不会在此步骤中失败:

    def resultBefore = currentBuild.result
    try {
       slackSend color: 'danger', message: 'Everything broke'
    } catch(err) {
       currentBuild.result = resultBefore
    }
    

    但是,我真的不明白为什么slackSend 命令不存在?它可能会失败(例如,如果您的 Slack 服务器已关闭),但只要您安装了 Slack Notification Plugin,它就应该存在!

    【讨论】:

    • 更多的是关于便携性。它在我自己设置的 Jenkins 机器上,但如果它转移到主要工程机器上,我不希望他们担心它是否存在(他们有自己的事情要做)。我尝试了这种方法,但它似乎不起作用。此外,如果我要报告损坏的构建,我不想更改构建状态。 :)
    • 我尝试在使用我知道不存在的函数之前记录构建结果,然后将其设置回 catch。不幸的是,这仍然不起作用No such DSL method 'thisFunctionNoExists' found among steps
    • 刚刚在一个简单的管道中测试了上面的代码,它工作得很好!你是对的,你需要设置回以前的构建结果,我相应地编辑了我的帖子
    猜你喜欢
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    相关资源
    最近更新 更多