In Jenkins how to pass a parameter from Pipeline job to a freestyle job

Jenkinspipelining

I am running a pipeline job and with this we need to pass a parameter to a downsteam job but its not working. We tried as follows:

Pipeline JOB:

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 is a Freestyle job and in that we tried accessing the parameter in script as follows but its not working.

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

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

Tried accessing variables but its not working. Can anyone please help me on this. We tried creating QA-Test-Windows freestyle job as Pipelinejob but in this freestyle there are lot of Build steps.

Best Answer

ON THE CALLING JOB:

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))]
            }
        }
    }
}

ON THE SECOND JOB:

pipeline {
    agent any

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

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