Jenkins管道:从另一个jenkinsfile读取值

时间:2017-12-05 16:15:51

标签: groovy jenkins-pipeline jenkins-shared-libraries

我使用共享的jenkins库并从那里克隆另一个git repo。该repo包含一个类似于以下内容的jenkins文件:

#!/usr/bin/env groovy
@Library('mylib')
import jLib.*

someStage{
    myparam = someValue
}

我想阅读" someValue"。 目前我正在使用正则表达式执行此操作,但这样我只能检索字符串而不是像地图一样复杂的值。

documentation of Shared jenkins libs值中,以下列方式从jenkinsfile加载:

def call(body) {
    // evaluate the body block, and collect configuration into the object
    def config = [:]
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = config
    body()
}

如何以类似的方式从工作区中的Jenkins文件中提取值?身体来自哪里?

感谢您的时间

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

Map configFromJenkinsfile(jenkinsfile){
    def jenkinsfileConfig = [:]
    def matches = jenkinsfile =~ /(?s)\{(.*?)\}/
    def exec = new GroovyShell(new Binding(jenkinsfileConfig)).evaluate(matches[0][1])
    return jenkinsfileConfig;
}

我测试了它,将jenkinsFile作为字符串传递(使用String projectJenkinsFile = readFile "Jenkinsfile"后)

我在jenkins文件中执行所有作业中的部分(在' {'和'}'之间)在groovyshell中,我的地图作为绑定。所有没有类型的作业都会被绑定并且可以被访问。