0

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

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

someStage{
    myparam = someValue
}

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

共享 jenkins 库的文档中,值是通过以下方式从 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()
}

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

感谢您的时间

4

1 回答 1

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")对其进行了测试

我在 groovyshell 中执行 jenkinsfile 中的所有分配(在“{”和“}”之间)的部分,并将我的地图作为绑定。所有没有类型的赋值都被绑定在绑定中并且可以被访问。

于 2017-12-06T13:52:31.733 回答