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

时间:2017-07-13 08:42:45

标签: json jenkins groovy jenkins-pipeline

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

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

这是我的代码:

pipeline {

agent any

import groovy.json.JsonSlurper

        stages {

                stage("test") {

                        steps {
                         }
                }
        }
}

我已经阅读了jenkins文档,我试图使用下一个但没有成功:

@Grab( 'groovy.json.JsonSlurper') import groovy.json.JsonSlurper

导入和@Grab都无法识别。有些想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

Pipeline script snippet

但是,如果从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

groovy Grab syntax validator 因此,脚本验证器在调用它时就知道Grab批注,并且它同时具有group和module属性。在此示例中,我使用的是所谓的shorthand notation