Variables de l'environnement d'accès au Pipeline Jenkins

j'essaie d'utiliser des pipelines DSL à Jenkins. J'ai pensé que ce serait bien si je pouvais utiliser le nom du projet comme partie de mon script.

git credentialsId: 'ffffffff-ffff-ffff-ffff-ffffffffffffff',
url: "${repo_root}/${JOB_NAME}.git"

j'obtiens l'erreur:

groovy.lang.MissingPropertyException: 
No such property: JOB_NAME for class: groovy.lang.Binding

je pensais que j'ai suivi ces directions, et ils mentionnent JOB_NAME comme l'une des variables.

j'ai décidé d'essayer:

sh 'env'

dans mon LIS, et cela affiche:

JOB_NAME = foo-bar

qui est ce que j'attends.

une Autre mentions sur le blog:

utilisation des variables d'environnement

Nous avons deux façons d'obtenir leur valeur. Les propriétés passées par -D= pendant le démarrage, nous pourrions lire System.getProperty("key") grâce à la forte relation de Groovy avec Java.

lire les variables d'environnement normales dans Java way est le System.getenv("VARIABLE")...

essayons ceci:

println "JOB_NAME = " + System.getenv('JOB_NAME'); 

Maintenant, Je obtenir:

java.lang.NullPointerException: Cannot get property 'System' on null object

Null objet? Mais, je peux voir que JOB_NAME est une variable d'environnement!

Comment lire dans le $JOB_NAME dans un script DSL dans un travail de Pipeline. Je suis en train d'essayer un travail de Pipeline, et quand je l'obtiendrai ce travail fera un Pipeline Multibranch avec un Jenkinsfile.

17
demandé sur Krzysztof Krasoń 2016-07-26 23:50:07

4 réponses

toutes les variables d'environnement sont accessibles en utilisant env, e.g. ${env.JOB_NAME}.

32
répondu Krzysztof Krasoń 2016-07-27 07:57:56

Ok-ce vraiment vexé moi aujourd'hui. En fin de compte, j'ai été fait dans un certain nombre de choses:

  • les chaînes à guillemets simples dans Groovy signifient "n'évaluez pas les variables", tout comme elles le font dans bash
  • utiliser $ interpolation est complètement inutile si vous faites simplement référence à la variable, donc vous pouvez juste faire env.JOB_NAME.

cette question s'est avérée être celle qui m'a aidé à déchiffrer le code: Contrôle Du Flux De Travail De Jenkins Accès BRANCH_NAME et GIT_COMMIT

4
répondu Tim Keating 2017-08-11 19:42:30

en effet il suffit d'utiliser ${env.JOB_NAME} pour accéder à une variable connue.

cependant si vous avez besoin d'accéder à la variable d'environnement dont le nom est donné par une autre variable (accès dynamique), utilisez simplement env["your-env-variable"].

j'ai eu le problème, j'ai configuré 3 variables d'environnement (dans Jenkins -> Administer -> Configure System -> Environment variables), nommons-les ENV_VAR_1,ENV_VAR_2,ENV_VAR_3. Maintenant je veux y accéder dynamiquement, je peux le faire en tant que tel:

def envVarName = "ENV_VAR_" + count  // Suppose count is initialized in a loop somewhere above...

def value = env[envVarName]  // Will be resolved to env["ENV_VAR_1"] depending on count value

les variables de mon environnement dans la configuration de Jenkins ressemblent à ceci :

enter image description here

2
répondu Pom12 2017-02-24 14:30:22

j'avais un problème avec le fait que ça ne marchait pas. Les variables propriétés/environnement définies globalement n'étaient disponibles qu'à l'intérieur d'un node étape. C'est un bug dans la version 2.4 du plugin Pipeline. Passez à la version 2.5 si vous rencontrez ce problème et vos propriétés globales seront disponibles n'importe où dans le script. J'ai posté ceci sur le wiki de Jenkins!--2-->ici avec le script de test que j'ai utilisé.

0
répondu Mig82 2017-05-25 16:59:16