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 lireSystem.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
.
4 réponses
toutes les variables d'environnement sont accessibles en utilisant env
, e.g. ${env.JOB_NAME}
.
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
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 :
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é.