从 jenkins 之前的构建中提取参数

era*_*iri 4 jenkins jenkins-pipeline

我正在研究 Jenkins 版本 2.32.1 管道。我想提取在我的工作的先前版本中选择的参数。

在我们之前的 Jenkins 实例 ( 1.627 ) 中,我们使用 jenkins.model.Jenkins.instance.getItem(job).lastBuild.getBuildVariables().get(param);

出于某种原因,这在此版本中不起作用(我也尝试禁用沙箱)。

关于如何实现它的任何指示?

dan*_*nov 7

先前脚本的简化版本:

def build = Jenkins.get().getItems(org.jenkinsci.plugins.workflow.job.WorkflowJob).find {it.displayName == 'YOUR_JOB_NAME_HERE'}?.getLastBuild()
build.actions.find{ it instanceof ParametersAction }?.parameters.each {echo "${it.name}=${it.value}"}
Run Code Online (Sandbox Code Playgroud)

实际上,对于那些想要从上次运行中获取当前构建的参数并且正在开发新的 2+ Jenkins 版本的人来说,这是一个更短的版本。
要获得 1 个特定参数:

def cls = currentBuild.getPreviousBuild().getRawBuild().actions.find{ it instanceof ParametersAction }?.parameters.find{it.name == 'cls'}?.value
Run Code Online (Sandbox Code Playgroud)

尊重地获取所有参数:

def cls = currentBuild.getPreviousBuild().getRawBuild().actions.find{ it instanceof ParametersAction }?.parameters
Run Code Online (Sandbox Code Playgroud)


jhe*_*erb 2

基于/sf/answers/1369522171/ ,类似的东西可能会起作用:

def h = hudson.model.Hudson.instance
def r = null
h.getItems(org.jenkinsci.plugins.workflow.job.WorkflowJob).each {project ->
    if (project.displayName.equals('YOUR_JOB_NAME')) {
        r = project
    }
}
r.getBuilds().findAll { b -> // here we loop over all past builds, apply some filter if necessary
    def p = b?.actions.find{ it instanceof ParametersAction }?.parameters
    p.each {
        echo "parameter ${it.name}: ${it.value}"
    }
}
Run Code Online (Sandbox Code Playgroud)