我正在研究Jenkins版本2.32.1管道。我想提取在我之前的工作版本中选择的参数。
在我们之前的Jenkins实例(1.627)中,我们使用的是jenkins.model.Jenkins.instance.getItem(job).lastBuild.getBuildVariables().get(param);
由于某些原因,这个版本无效(我也尝试禁用沙盒)。
关于如何完成它的任何指示?
答案 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"]}")