我有一个包含“import groovy.json.JsonSlurper”的groovy代码。

我花了一天的时间进行测试,但我不知道如何使用声明性语法加载外部库。

这是我的代码:

pipeline {

agent any

import groovy.json.JsonSlurper

        stages {

                stage("test") {

                        steps {
                         }
                }
        }
}

我已经阅读了詹金斯(Jenkins)文档,并且尝试使用下一个但没有成功:

@Grab('groovy.json.JsonSlurper')
导入groovy.json.JsonSlurper

无法识别import和@Grab。有想法吗

谢谢!

最佳答案

@Daniel Majano所说的关于import语法是正确的,但是我发现的@Grab语法在直接由Jenkins和Pipeline script维护的Pipeline script from SCM之间存在行为差异。

当我在测试人员管道作业的管道脚本中放置Grab命令时,我发现Grab命令是否存在或是否已被注释都没有任何区别。

json - Jenkins:使用声明性语法从Jenkinsfile导入外部包-LMLPHP

但是,当从Pipeline script from SCM使用时,它将引发以下异常...

java.lang.RuntimeException: No suitable ClassLoader found for grab

我从SCM脚本中删除了它,最后一切都解决了。

其他背景

我不确定为什么SCM版本中的抓取会令人窒息,但是groovy编辑器肯定有一些工作部分,因为如果您定义了部分抓取命令,它将给您一些验证错误,这些错误指向虚线,如您在下面的红色X框,错误为The missing attribute "module" is required in @Grab annotations:

json - Jenkins:使用声明性语法从Jenkinsfile导入外部包-LMLPHP
因此,脚本验证器在调用它时就知道Grab批注,并且它同时具有group和module属性。在此示例中,我使用了所谓的shorthand notation

关于json - Jenkins:使用声明性语法从Jenkinsfile导入外部包,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45075621/

10-09 02:09