我有两份工作。第一个是使用一些参数手动触发的(例如需要的数字)。我有第二份工作,它使用参数来选择上一份工作的特定构建(运行参数)。
现在,我需要从第一份工作中获取参数(在本例中为数字),第二份工作也需要这些参数。我想防止让用户第二次给出 number 参数。
与此同时,我找到了一种通过以下方式从第一个作业中提取参数的方法:
@NonCPS
def getParameters(def item) {
def result = ""
def p = item?.actions.find{ it -> it instanceof ParametersAction }?.parameters
p.each { it ->
echo "parameter ${it.name}: ${it.value}"
if (it.name.equals("NUMBER")) {
result = it.value.toString()
}
}
return result
}
...
node (..) {
def item = hudson.model.Hudson.instance.getItem("${SELECTED_JOBNAME}")
def number = Integer.parseInt("${SELECTED_NUMBER}")
def x = item.getBuildByNumber(number)
def newNumber = getParameters(x)
出现的问题是得到以下内容:
parameter NUMBER: 16
[Pipeline] echo
org.jenkinsci.plugins.workflow.job.WorkflowJob@1776388d[XX-YY]
[Pipeline] echo
XX-YY #48
[Pipeline] echo
newNumber: 16
[Pipeline] stage
[Pipeline] { (First)
[Pipeline] }
[Pipeline] }
[Pipeline] End of Pipeline
java.io.NotSerializableException: org.jenkinsci.plugins.workflow.job.WorkflowJob
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)
at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65)
at org.jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56)
at org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50)
at org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride(RiverObjectOutputStream.java:179)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:343)
at java.util.HashMap.writeObject(HashMap.java:1129)
我已经尝试使用
@NonCPS
在几个地点node (..) {
@NonCPS
def item = hudson.model.Hudson.instance.getItem("${SELECTED_JOBNAME}")
@NonCPS
def number = Integer.parseInt("${SELECTED_NUMBER}")
@NonCPS
def x = item.getBuildByNumber(number)
@NonCPS
def newNumber = getParameters(x)
但没有运气。有人知道如何解决这个问题吗?也许另一种获取参数的方法?
最佳答案
一种解决方法,但在源构建中,您可以生成包含所需参数值的附加工件,例如Java 属性文件。然后您可以将此工件复制到您的管道并提取值
关于jenkins - 获取流水线中其他作业的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43627950/