Tengo una canalización parametrizada, de acuerdo con la entrada del usuario, luego se asignan algunos valores a las variables, si ve el código hay 2 secciones de eco, una justo después de la declaración de cambio y otra dentro de los pasos de la canalización en "preparación" etapa, el primer conjunto de "echos" muestra los valores correctos de las vars, mientras que el segundo conjunto de "echos" dentro de los pasos de la canalización no lo es, por lo que parece que las variables no se están recibiendo en la canalización, ¿cómo puedo hacer esto ?, (en el ejemplo siguiente se seleccionó "Stress_Test").

def local_path
def branch
def script_file
def datagen_file
    switch (TEST_TYPE) {
                        case "Smoke_Test":
                            branch = "SmokeTest"
                            local_path = "/e/jmeter/apache-jmeter-5.3/bin/tcp-performance-engineering/${BRANCH}"
                            script_file = "PE_TCP_RESTAPI_June2020_SMK.jmx"
                            datagen_file= "TCP_JMeter_DataFiles_smk.yaml"
                            break
                        case "Regular_Load":
                            branch = "Regular"
                            local_path = "/e/jmeter/apache-jmeter-5.3/bin/tcp-performance-engineering/${branch}"
                            script_file = "PE_TCP_RESTAPI_July2020_Regular.jmx"
                            datagen_file= "TCP_JMeter_DataFiles_regular.yaml"
                            break
                        case "Peak_Load":
                            branch = "PeakTest"
                            local_path = "/e/jmeter/apache-jmeter-5.3/bin/tcp-performance-engineering/${branch}"
                            script_file = "PE_TCP_RESTAPI_July2020_Peak.jmx"
                            datagen_file= "TCP_JMeter_DataFiles_peak.yaml"
                            break
                        case "Stress_Test":
                            branch = "StressTest"
                            local_path = "/e/jmeter/apache-jmeter-5.3/bin/tcp-performance-engineering/${branch}"
                            script_file = "PE_TCP_RESTAPI_July2020_Stress.jmx"
                            datagen_file= "TCP_JMeter_DataFiles_stress.yaml"
                            break                   
                        default:
                            println "Test type was not set!"
                            break
                    }
    echo "test type selected ${TEST_TYPE}"
                    echo "branch to checkout ${branch}"
                    echo "path in local ${local_path}"
                    echo "script name ${script_file}"
                    echo "datagen file name ${datagen_file}"
    pipeline {
        agent any
            stages {        
                stage('Preparation...') {
                    steps{
                    sh '''
                    echo "test type selected ${TEST_TYPE}"
                    echo "branch to checkout ${branch}"
                    echo "path in local ${local_path}"
                    echo "script name ${script_file}"
                    echo 2datagen file name ${datagen_file}"
                    echo "****************************************"

*rest of the code is not relevant.

Y esto es lo que obtengo en la salida ...

Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] echo
test type selected Stress_Test
[Pipeline] echo
branch to checkout StressTest
[Pipeline] echo
path in local /e/jmeter/apache-jmeter-5.3/bin/tcp-performance-engineering/StressTest
[Pipeline] echo
script name PE_TCP_RESTAPI_July2020_Stress.jmx
[Pipeline] echo
datagen file name TCP_JMeter_DataFiles_stress.yaml
[Pipeline] node
Running on Jenkins in E:\jenkins\workspace\TCP_Performance_Test_V1
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Preparation...)
[Pipeline] sh
+ echo 'test type selected Stress_Test'
test type selected Stress_Test
+ echo 'branch to checkout '
branch to checkout 
+ echo 'path in local '
path in local 
+ echo 'script name '
script name 

Este es mi primer pipeline, cualquier ayuda será muy apreciada.

0
Moi Rizo 29 jul. 2020 a las 05:08

1 respuesta

La mejor respuesta

Las canalizaciones de Jenkins están escritas en groovy y groovy, ' se usa para cadenas literales que no admiten la interpolación de variables. En la pregunta, estás usando sh ''' ... ''' que hace que todo dentro de ese bloque sea literal y se ejecute como está. Es decir, todas las variables se buscan en el entorno de shell y no en la canalización.

Para solucionarlo, cambie sh ''' ... ''' a sh """ ... """ o elimine el bloque sh por completo.

Eche un vistazo a 4. Strings sección de documentación maravillosa.

0
Moon 29 jul. 2020 a las 03:48