Tengo tres etapas en Jenkins Pipeline Script VIZ (1) Precheck, (2) Build-Prod & (3) Build-Dr.

He declarado el paso de entrada para el disparador manual en el escenario "Build-DR"

Mi tubería está basada en la condición en la base, basada en el parámetro de usuario en la etapa de Precheck.

Condición1: "Precheck" -> "Build-Pod" y luego se ejecuta "Build-Dr".

Condición2: "Precheck" y luego se ejecuta "Build-DR" (salta a la construcción, PROD).

Necesito la etapa de entrada en la condición1 y está funcionando bien, sin embargo, la etapa de entrada no debe ejecutarse para Condición2 i.e sin mensajes emergentes con paso de entrada. Por favor, hágamelo saber cómo podemos poner una condición alrededor de la etapa de entrada en la Etapa 3 Build-DR, por lo que no ejecute la etapa de entrada cuando la línea de la línea se salta (2).

Código de script de Pipeline Jenkins:

  agent any         
  stages {
      stage ("Pre-Check Parameters") {      
          steps {

              echo "Pre-Check called in pipeline"
          }
        }
              stage ("build-prod") {           
          when {
              expression { params.region == 'prod_only' || params.region == 'prod_and_dr' }
          }
          steps { 
              build 'job4'
          }

        }
          stage ("build-dr") {           
                  input{
                  message "Proceed or Abort"
                  submitter "user1,admin"
                  parameters {
                  string(name:'username', defaultValue: 'user1', description: 'Username of the user pressing Ok')
                  }
              } 

          when {
              expression { params.region == 'dr_only' || params.region == 'prod_and_dr'}
          }
          steps { 
              build 'job5'
          }    
      }
  }
}

Amablemente sugiera.

0
Ashar 14 jul. 2019 a las 11:10

1 respuesta

La mejor respuesta

Actualmente está utilizando la directiva de entrada, como se describe aquí, pero esto le impide que Haz esta entrada condicional. En realidad, tiene que usar el paso de entrada . En lugar de agregar el campo de entrada directamente debajo de la directiva stage, lo mueve en el bloque steps de su etapa y agregue un bloqueo script a su alrededor para usarlo / else condicional.

Y tenga cuidado de eliminar los soportes rizados que le rodean el paso de entrada y para agregar colon después de cada propiedad.

Lo que tiene que hacer ahora es adaptar esta línea a sus requisitos: if(Condition1 == true) Dependiente del valor de su parámetro.

stage("build-dr") {
    when {
        expression { params.region == 'dr_only' || params.region == 'prod_and_dr'}
    }
    steps {
        script {
            if(Condition1 == true) {
                input message: "Proceed or Abort", submitter: "user1,admin",
                parameters: [string(name:'username', defaultValue: 'user1', description: 'Username of the user pressing Ok')] 
            }
        }
        build 'job5'
    }
}

Alternativamente, puede usar un bloque de declaración de entorno para declarar una variable y asignar un valor específico a él si se ejecutará su segunda etapa. Pero cualquier valor de medio ambiente siempre se escribirá como un String. Esto es importante para el condicional if / también. Una buena manera de asignar un valor a la variable sería agregar una sección post a su segunda etapa.

pipeline {
    agent any
    environment {
        STAGE_2_EXECUTED = "0"
    }
    stages{
        stage("....") {
            steps {
                ....
            }
        }
        stage("Second stage") {
            when {
                expression { /* Your condition */ }
            }
            steps {
                ....
            }
            post {
                always {
                    script {
                        STAGE_2_EXECUTED = "1";
                    }
                }
            }
        }
        stage("Third Stage") {
            steps {
                script {
                    if(STAGE_2_EXECUTED == "1") {
                        input message: "Proceed or Abort", submitter: "user1,admin",
                        parameters: [string(name:'username', defaultValue: 'user1', description: 'Username of the user pressing Ok')] 
                    }
                }
                build 'job5'
            }
        }
    }
}
1
Jns 14 jul. 2019 a las 10:09