我使用共享的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文件中提取值?身体来自哪里?
感谢您的时间
答案 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中,我的地图作为绑定。所有没有类型的作业都会被绑定并且可以被访问。