在 Jenkins 中如何将参数从流水线作业传递到自由式作业

Geo*_*Geo 4 jenkins pipelining

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

管道作业:

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"]]
        }
    }
    }
Run Code Online (Sandbox Code Playgroud)

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

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

Write-output "OS selected for testing is ${ParamA}"
Run Code Online (Sandbox Code Playgroud)

尝试访问变量但它不起作用。任何人都可以帮我解决这个问题。我们尝试将 QA-Test-Windows 自由式作业创建为 Pipelinejob,但在此自由式中有很多构建步骤。

小智 9

在呼叫工作中

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))]
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

第二份工作:

pipeline {
    agent any

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

    stages {
        stage('PrintParameter'){
            steps{
                sh 'echo ${HELLO}'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是需要安装`parameterized-trigger`插件(https://plugins.jenkins.io/parameterized-trigger) (2认同)

小智 4

我不确定您的代码到底出了什么问题,看起来有错误。也许您也需要将自己包裹"$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}")]
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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