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

时间:2017-01-26 07:16:37

标签: jenkins jenkins-pipeline

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

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

由于某些原因,这个版本无效(我也尝试禁用沙盒)。

关于如何完成它的任何指示?

4 个答案:

答案 0 :(得分:3)

上一个脚本的简化版本:

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}"}

实际上,对于那些想要获得上一次运行中当前版本的参数并且正在使用新的2+ Jenkins版本的人来说,这个版本有点短。
获得1个特定参数:

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

尊重所有参数:

def cls = currentBuild.getPreviousBuild().getRawBuild().actions.find{ it instanceof ParametersAction }?.parameters

答案 1 :(得分:1)

基于https://stackoverflow.com/a/19564602/3920342

,这样的事情可能有用
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}"
    }
}

答案 2 :(得分:0)

这就是我的工作方式,@ dan.goriaynov和@jherb的回答对我造成了一些CPS关闭问题。

(代码的要旨是仅允许部署比上一个更大的TAG号)

stage('Validate build number') {
  def previous_build = currentBuild.getPreviousBuild().getRawBuild();
  def PREVIOUS_TAG = '';
  for (int i = 0; i < previous_build.allActions.size(); i++) {
    if (previous_build.allActions[i] in hudson.model.ParametersAction) {
      PREVIOUS_TAG = previous_build.allActions[i].getParameter("TAG").value
    }
  }
  if  (PREVIOUS_TAG.toInteger() > TAG.toInteger()) {
    echo PREVIOUS_TAG
    error('TAG number needs to be greater than the previous one')
  }
}

答案 3 :(得分:0)

对于那些由于管理员权限而无法访问 getActions() 的人,即面临以下错误:

Scripts not permitted to use method hudson.model.Actionable getActions

他们可以将参数变量复制到 env 并使用 build.previousBuild.buildVariables

stage('Prepare environment') {
  steps {
    script {
       env.MY_PARAM_COPY = "${MY_PARAM}"
    }
  }
}
println("MY_PARAM in previous build: ${currentBuild.previousBuild.buildVariables["MY_PARAM_COPY"]}")