web-dev-qa-db-fra.com

Accès pour créer des variables d'environnement à partir d'un script groovy dans une étape de construction de Jenkins (Windows)

J'utilise le plugin Scriptler, je peux donc exécuter un script groovy comme étape de construction. Mes esclaves Jenkins s'exécutent sur Windows en mode service. Avec Scriptler, je n'ai pas besoin d'utiliser les scripts batch de Windows.

Mais j'ai du mal à obtenir les variables d'environnement dans une étape de compilation ... Cela fonctionne:

System.getenv("BASE")

BASE fait partie du démarrage de env-vars on jenkins. Cependant, j'aimerais avoir

%JOB_NAME%

Si j'ajoute une étape de génération "Exécuter le traitement par lots de Windows":

echo %JOB_NAME%

Ça marche. Si j'ajoute un script scriptler en tant qu'étape de construction avec les mêmes paramètres:

println "JOB_NAME: " + System.getenv("JOB_NAME")

Je suis en train:

JOB_NAME: null

Alors, comment puis-je atteindre les variables d'environnement injectées à partir d'un script groovy en tant qu'étape de construction?

44
Adam Ocsvari

Le script Scriptler Groovy ne semble pas obtenir toutes les variables d'environnement de la construction. Mais ce que vous pouvez faire est de les forcer en tant que paramètres du script:

  1. Lorsque vous ajoutez l'étape de construction de Scriptler à votre travail, sélectionnez l'option "Définir les paramètres de script".

  2. Ajoutez un paramètre pour chaque variable d’environnement que vous souhaitez transmettre. Par exemple, "Nom: NOM_JOB", "Valeur: $ NOM_JOB". La valeur sera étendue à partir de l'environnement de génération Jenkins à l'aide de variables de type '$ envName'. La plupart des champs des paramètres de configuration de travail prennent en charge ce type d'expansion, selon mon expérience.

  3. Dans votre script, vous devriez avoir une variable portant le même nom que le paramètre afin de pouvoir accéder aux paramètres avec quelque chose comme:

    println "JOB_NAME = $ JOB_NAME"

Je n'ai pas utilisé Sciptler moi-même, mis à part quelques expériences, mais votre question posait un problème intéressant. J'espère que ça aide!

9
macg33zr

build objet est présent lors de l'exécution groovy du système. Tu peux le faire:

def myVar = build.getBuildVariables().get('myVar')
51

Vous pourriez peut-être les obtenir comme ceci:

def thr = Thread.currentThread()
def build = thr?.executable
def envVarsMap = build.parent.builds[0].properties.get("envVars")
18
Alf

Sur jenkins 2.x, avec le plugin groovy 2.0, en cours d'exécution SystemGroovyScript J'ai réussi à créer des variables, comme ci-dessous:

def build = this.getProperty('binding').getVariable('build')
def listener = this.getProperty('binding').getVariable('listener')
def env = build.getEnvironment(listener)
println env.MY_VARIABLE

Si vous utilisez goovy depuis un fichier, un simple System.getenv('MY_VARIABLE') suffit

8

La seule façon pour que cela fonctionne (sous Linux) était de suivre ce conseil:

https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+System+Groovy+script

import hudson.model.*

// get current thread / Executor and current build
def thr = Thread.currentThread()
def build = thr?.executable

// if you want the parameter by name ...
def hardcoded_param = "FOOBAR"
def resolver = build.buildVariableResolver
def hardcoded_param_value = resolver.resolve(hardcoded_param)

println "param ${hardcoded_param} value : ${hardcoded_param_value}"

Ceci est sur Jenkins 1.624 fonctionnant sur CentOS 6.7

5
dayer4b

Une chose à noter, si vous utilisez un travail de style libre, vous ne pourrez pas accéder aux paramètres de construction ni à l'environnement de la machine virtuelle Java Jenkins SAUF si vous utilisez des étapes de construction de System Groovy Script. J'ai passé des heures à googler et à faire des recherches avant de rassembler suffisamment d'indices pour le comprendre.

2
John Czukkermann

Jenkins 2.x contient les variables globales. env est l'un d'entre eux de n'importe quel script ...

println env.JOB_NAME

Plus d'informations sur https://build.intuit.com/services-config/pipeline-syntax/globals#env

1
Marcello de Sales