es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo leer parámetros desde un archivo dentro de un trabajo de canalización Jenkins.

Tengo un pipeline que se ejecuta para tres ramas diferentes (dev/uat/master). Algunos parámetros cambian para cada rama, por lo que están codificados para cada entorno, lo que resulta en tres Jenkinsfile (uno para cada entorno).

Mi segunda solución es tener tres archivos de propiedades diferentes basados en el entorno. Un único trabajo de Jenkins iniciará los trabajos de Jenkins, pero se basará en el nombre de la rama (que recogeré del desencadenador de webhook de GitHub).

Mi archivo Jenkinsfile tiene una variable de entorno cuya asignación se ve así:

myJenkinsJob.jenkinsfile

serviceAccountName = sh(returnStdout: true, script: "awk -F= '{$1 ~ /serviceAccountName/ ; gsub($1"=","") ; print}' dev.properties").trim()

El archivo dev.properties se parece a esto:

serviceAccountName=abc@def.com

Esto evalúa el valor mencionado en el archivo de propiedades. serviceAccountName=abc@def.com.

¿Alguien tiene alguna alternativa mejor / más fácil? ¿Algún complemento que pueda leer los parámetros pasados ​​en un archivo sin pasar por todos los comandos sh para asignaciones en el bloque de entorno / parámetros?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una solución alternativa podría ser usar el plugin de Credenciales de Jenkins para almacenar los parámetros específicos del entorno como credenciales de texto secreto. Luego, en el pipeline, se puede recuperar la credencial correspondiente según el nombre de la rama y usarla como valor del parámetro.

    Por ejemplo, podemos crear tres credenciales separadas de texto secreto en Jenkins:

    • MY_APP_DEV_SERVICE_ACCOUNT con el valor abc@dev.com para la rama dev
    • MY_APP_UAT_SERVICE_ACCOUNT con el valor abc@uat.com para la rama uat
    • MY_APP_PROD_SERVICE_ACCOUNT con el valor abc@prod.com para la rama master

    En el pipeline, podemos recuperar el nombre de la rama de la variable de entorno GIT_BRANCH (suponiendo que estamos usando Git SCM) y usarlo para recuperar el valor de la credencial correspondiente con el paso withCredentials:

    stage('My Stage') {
      steps {
        script {
          def branchName = env.GIT_BRANCH.replaceAll('^refs/heads/', '')
    
          withCredentials([string(credentialsId: "MY_APP_${branchName.toUpperCase()}_SERVICE_ACCOUNT", variable: 'SERVICE_ACCOUNT_NAME')]) {
            // Use the SERVICE_ACCOUNT_NAME variable as the parameter value
          }
        }
      }
    }
    

    De esta manera, solo necesitamos un Jenkinsfile para todos los entornos y los valores de los parámetros se pueden administrar y actualizar fácilmente a través de la Interfaz de usuario de Credenciales de Jenkins.

Comments are closed.