在Pipeline中获取其他作业的参数

时间:2017-04-26 07:43:48

标签: jenkins groovy jenkins-pipeline

我有两份工作。第一个打开是通过一些参数手动触发的(例如需要的数字)。我有第二个工作,它使用参数来选择上一个作业的特定构建(运行参数)。

现在我需要从第一份工作中得到参数(在这种情况下是数字),这也是第二份工作所需要的。我想阻止让用户第二次给出数字参数。

与此同时,我找到了一种方法,通过以下方式从第一份工作中提取参数:

@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)

但没有运气。有人知道如何解决这个问题吗?也许另一种方法来获取参数?

2 个答案:

答案 0 :(得分:0)

种类的解决方法,但在源代码构建中,您可以生成包含所需参数值的其他工件,例如: Java属性文件。然后,您可以将此工件复制到管道并提取值

答案 1 :(得分:0)

尝试在第一个作业配置的后构建操作中调用第二个作业 enter image description here