在詹金斯中,如何将参数从管道作业传递到自由式作业

在詹金斯中,如何将参数从管道作业传递到自由式作业

我正在运行管道作业,我们需要将参数传递给下游作业,但它不起作用。我们尝试了以下方法:

管道作业:

node {
    parameters {
            choice(
                name: 'OS',
                choices:"Windows\nLinux\nMAC",
                description: "Choose Environment to build!")
                }
    stage('Build') {
        if("${params.Environment}" == 'Windows')
        {
       paramAValue = "${params.Environment}"
       build job: 'QA-Test-Windows',parameters: [[$class: 'StringParameterValue', name: 'ParamA', value: "$paramAValue"]]
        }
    }
    }

QA-Test-Windows 是一项自由式工作,我们尝试按如下方式访问脚本中的参数,但没有起作用。

Write-output "OS selected for testing is ${params.ParamA}"

Write-output "OS selected for testing is ${ParamA}"

尝试访问变量,但不起作用。有人能帮我吗?我们尝试将 QA-Test-Windows 自由式作业创建为 Pipelinejob,但在这个自由式作业中有很多构建步骤。

答案1

关于呼召的工作

pipeline {
    agent any

    parameters {
        string(defaultValue: "123", description: 'This is a parameter', name: 'PARAMETER01')
    }

    stages {
        stage('Start'){
            steps{
                    build job: 'ANOTHER_JOB_NAME', wait: false, parameters: [string(name: 'HELLO', value: String.valueOf(PARAMETER01))]
            }
        }
    }
}

关于第二份工作:

pipeline {
    agent any

    parameters {
        string(defaultValue: "", description: 'K', name: 'HELLO')
    }

    stages {
        stage('PrintParameter'){
            steps{
                sh 'echo ${HELLO}'
            }
        }
    }
}

答案2

我不确定你的代码到底出了什么问题,看起来好像有错误。也许你也需要将你的代码包装"$paramAValue"{}。当你尝试运行下游作业时?

但是,根据您的需要,我刚刚测试了这个有效的解决方案:

我有两个管道作业(上游和下游):

  • 下游作业具有带名称的参数OS

  • 上游作业有选择参数PickAnOS

并且有上游作业的工作管道脚本,该脚本使用选定的参数运行下游作业

pipeline {
    agent any
    parameters {
        choice(choices: ['Windows', 'Linux'], description: 'What OS?', name: 'PickAnOS')
    }
    stages {
        stage("run downstream job") {
            steps {
                echo "You choose: ${params.PickAnOS}"
                build job: 'downstream_job', parameters: [string(name: 'OS', value: "${params.PickAnOS}")]
            }
        }
    }
}

我希望这有助于编辑:修复了詹金斯引号上的一个小错误,即''与“”有所不同。

答案3

我的解决方案是(将分支名称传递给使用该分支克隆 Repo 的下游作业)

上游管道代码:-

// Git Checkout 
build job: 'FrontEnd_Checkout', wait: false, parameters: [string(name: 'BRANCH_NAME', value: "${env.frontend_branch}")]

下游作业:- 选择 -> 该项目已参数化 -> 名称:${variable}

相关内容