read def jenkins jenkins-pipeline

read - Jenkinsfile Declarative Pipeline que define las env vars dinámicas



jenkins set environment variables (4)

Soy nuevo en la tubería de Jenkins, estoy definiendo una canalización de sintaxis declarativa y no sé si puedo resolver mi problema, porque no encuentro una solución.

En este ejemplo, necesito pasar una variable a un complemento de ansible (en la versión anterior uso un ENV_VAR o inyectándolo desde un archivo con un complemento de inyección, esa variable proviene de un script

Este es mi escenario perfecto (pero no funciona porque el entorno {}):

pipeline { agent { node { label ''jenkins-node''}} stages { stage(''Deploy'') { environment { ANSIBLE_CONFIG = ''${WORKSPACE}/chimera-ci/ansible/ansible.cfg'' VERSION = sh("python3.5 docker/get_version.py") } steps { ansiblePlaybook credentialsId: ''example-credential'', extras: ''-e version=${VERSION}'', inventory: ''development'', playbook: ''deploy.yml'' } } } }

Probé otras formas de probar cómo funcionan las variables env en otras publicaciones, por ejemplo:

pipeline { agent { node { label ''jenkins-node''}} stages { stage(''PREPARE VARS'') { steps { script { env[''VERSION''] = sh(script: "python3.5 get_version.py") } echo env.VERSION } } } }

pero "echo env.VERSION" devuelve null.

También probé el mismo ejemplo con: - VERSION = python3.5 get_version.py - VERSION = python3.5 get_version.py > props.file (y trate de inyectarlo, pero no encontré cómo)

Si esto no es posible, lo haré en el rol de ansible.

ACTUALIZAR

Hay otro "problema" en Ansible Plugin, para usar vars en vars adicionales, debe tener comillas dobles en lugar de simples.

ansiblePlaybook credentialsId: ''example-credential'', extras: "-e version=${VERSION}", inventory: ''development'', playbook: ''deploy.yml''


En Jenkins 2.76 pude simplificar la solución de @burnettk a:

pipeline { agent { label ''docker'' } environment { awesomeVersion = sh(returnStdout: true, script: ''echo 0.0.1'') } stages { stage(''output_version'') { steps { echo "awesomeVersion: ${awesomeVersion}" } } } }


Puede crear variables antes de que comience el bloque de canalización. Puede tener sh retorno stdout para asignar a estas variables. No tiene la misma flexibilidad para asignar variables de entorno en la stanza de environment . Así que sustitúyalo en python3.5 get_version.py donde tengo echo 0.0.1 en el script aquí (y asegúrese de que su script de python solo devuelva la versión a stdout):

def awesomeVersion = ''UNKNOWN'' pipeline { agent { label ''docker'' } stages { stage(''build'') { steps { script { awesomeVersion = sh(returnStdout: true, script: ''echo 0.0.1'') } } } stage(''output_version'') { steps { echo "awesomeVersion: ${awesomeVersion}" } } } }

La salida de la tubería anterior es:

awesomeVersion: 0.0.1


También puede volcar todas sus vars en un archivo y luego usar la sintaxis ''-e @file''. Esto es muy útil si tiene muchas variables para poblar.

steps { echo "hello World!!" sh """ var1: ${params.var1} var2: ${params.var2} " > vars """ ansiblePlaybook inventory: _inventory, playbook: ''test-playbook.yml'', sudoUser: null, extras: ''-e @vars'' }


Utilizando el complemento "pasos de la utilidad de canalización", puede definir vars generales disponibles para todas las etapas desde un archivo de propiedades. Por ejemplo, vamos a props.txt como:

version=1.0 fix=alfa

y mezclar el script y el pipeline declarativo de Jenkins como:

def props def VERSION def FIX def RELEASE node { props = readProperties file:''props.txt'' VERSION = props[''version''] FIX = props[''fix''] RELEASE = VERSION + "_" + FIX } pipeline { stages { stage(''Build'') { echo ${RELEASE} } } }