Comment définir des variables d'environnement dans Jenkins?
Je voudrais pouvoir faire quelque chose comme:
AOEU=$(echo aoeu)
Et que Jenkins définisse AOEU=aoeu
.
La section variables d'environnement de Jenkins ne le fait pas. Au lieu de cela, il définit AOEU='$(echo aoeu)'
.
Comment puis-je demander à Jenkins d'évaluer une commande shell et d'affecter la sortie à une variable d'environnement?
Finalement, je veux pouvoir affecter l'exécuteur d'un travail à une variable d'environnement qui peut être transmise ou utilisée par d'Autres scripts.
10 réponses
Cela peut être fait via envinject plugin de la manière suivante:
-
Créez une étape de construction "Execute shell" qui s'exécute:
echo AOEU=$(echo aoeu) > propsfile
Créez une étape de génération Inject variables d'environnement et définissez "chemin du fichier de propriétés" sur
propsfile
.
Note : Ce plugin n'est (pour la plupart) pas compatible avec le plugin Pipeline.
Le moyen le plus simple
Vous pouvez utiliser le plugin EnvInject pour injecter des variables d'environnement au démarrage de la construction. Par exemple:
Comment vous savez que ça marche
Dans mon cas, j'avais besoin d'ajouter la variable d'environnement JMETER_HOME
pour être disponible via mes scripts de construction Ant dans tous les projets sur mon serveur Jenkins (Linux), d'une manière qui n'interférerait pas avec mon environnement de construction local (Windows et Mac) dans le script build.xml
. Définir la variable d'environnement via Manage Jenkins-Configure System-Global properties était le moyen le plus simple et le moins intrusif d'y parvenir. Pas de plugins sont nécessaire.
La variable d'environnement est alors disponible dans Ant via:
<property environment="env" />
<property name="jmeter.home" value="${env.JMETER_HOME}" />
Cela peut être vérifié aux œuvres en ajoutant:
<echo message="JMeter Home: ${jmeter.home}"/>
Qui produit:
JMeter Accueil:~/.jmeter
EnvInject Plugin aka (environment Injector Plugin ) Vous donne plusieurs options pour définir des variables d'environnement à partir de la configuration Jenkins.
En sélectionnant Inject environment variables to the build process
, vous obtiendrez:
Properties File Path
Properties Content
Script File Path
Script Content
Et enfin
Evaluated Groovy script
.
Evaluated Groovy script
vous donne la possibilité de définir la variable d'environnement en fonction du résultat de l'exécution commande:
- avec
execute
méthode:
return [HOSTNAME_SHELL: 'hostname'.execute().text,
DATE_SHELL: 'date'.execute().text,
ECHO_SHELL: 'echo hello world!'.execute().text
]
- ou avec un code
Groovy
explicite:
return [HOSTNAME_GROOVY: java.net.InetAddress.getLocalHost().getHostName(),
DATE_GROOVY: new Date()
]
(plus de détails sur chaque méthode peuvent être trouvés dans build-in help (?))
Malheureusement, vous ne pouvez pas faire la même chose à partir de Script Content
comme il est indiqué:
Exécute un fichier de script destiné à définir un environnement tel que dossiers, copie de fichiers, et ainsi de suite. Donnez le contenu du fichier de script. Vous pouvez utiliser les propriétés ci-dessus variable. cependant, ajouter ou remplacer les variables d'environnement dans le script n'ont aucun impact sur construire le travail .
Il y a Build Env Propagator Plugin qui vous permet d'ajouter de nouvelles variables d'environnement de construction, par exemple
Toute étape successive de propagation des variables d'environnement de construction remplacera les valeurs de variables d'environnement précédemment définies.
, Vous pouvez essayer quelque chose comme ceci
stages {
stage('Build') {
environment {
AOEU= sh (returnStdout: true, script: 'echo aoeu').trim()
}
steps {
sh 'env'
sh 'echo $AOEU'
}
}
}
Vous pouvez utiliser Plugin D'injecteur D'environnement pour définir des variables D'environnement dans Jenkins au niveau des tâches et des nœuds. Ci-dessous, je vais montrer comment le faire au niveau de l'emploi.
- depuis L'interface Web Jenkins, allez à
Manage Jenkins > Manage Plugins
et installez le plugin.
- Aller à votre travail
Configure
écran - Trouver
Add build step
dansBuild
section et sélectionnezInject environment variables
- définit l'environnement souhaité variable comme VARIABLE_NAME = modèle de valeur. Dans mon cas, j'ai changé la valeur de la variable USERPROFILE
Si vous devez définir une nouvelle variable d'environnement en fonction de certaines conditions (par exemple les paramètres de travail), vous pouvez vous référer à cette réponse .
, Normalement, vous pouvez configurer variables d'Environnement dans propriétés Globales dans Configurer le Système.
Cependant, pour les variables dynamiques avec substitution de shell, vous pouvez créer un fichier de script dans Jenkins home dir et l'exécuter pendant la construction. L'accès SSH est nécessaire. Exemple.
- connectez-vous en tant que Jenkins:
sudo su - jenkins
ousudo su - jenkins -s /bin/bash
-
Créer un script shell, par exemple:
echo 'export VM_NAME="$JOB_NAME"' > ~/load_env.sh chmod 750 ~/load_env.sh
-
Dans Jenkins Build ( Exécuter shell ), appelle le script et ses variables avant toute autre chose, par exemple
source ~/load_env.sh
Essayez le greffon de script D'environnement (GitHub ) qui est très similaire à EnvInject . Il vous permet d'exécuter un script avant la construction (après l'extraction SCM) qui génère des variables d'environnement pour cela. Par exemple
Et dans votre script, vous pouvez imprimer par exemple FOO=bar
sur la sortie standard pour définir cette variable.
Exemple à ajouter à une variable de style PATH
existante:
echo PATH+unique_identifier=/usr/local/bin
Donc, vous êtes libre de faire ce dont vous avez besoin dans le script-soit cat
un fichier, soit exécutez un script dans une autre langue à partir de l'arborescence source de votre projet, etc.
, Pour quelque raison sudo su - jenkins
ne pas me connecter à jenkins
l'utilisateur, j'ai fini par utiliser une approche différente.
J'ai réussi à définir les variables d'env global en utilisant jenkins config.xml
à /var/lib/jenkins/config.xml
(installé dans Linux/ RHEL) - sans utiliser de plugins externes.
J'ai simplement dû arrêter jenkins ajouter puis ajouter globalNodeProperties
, puis redémarrez.
Exemple, je définis les variables APPLICATION_ENVIRONMENT
et SPRING_PROFILES_ACTIVE
à continious_integration
ci-dessous,
<?xml version='1.0' encoding='UTF-8'?>
<hudson>
<globalNodeProperties>
<hudson.slaves.EnvironmentVariablesNodeProperty>
<envVars serialization="custom">
<unserializable-parents/>
<tree-map>
<default>
<comparator class="hudson.util.CaseInsensitiveComparator"/>
</default>
<int>2</int>
<string>APPLICATION_ENVIRONMENT</string>
<string>continious_integration</string>
<string>SPRING_PROFILES_ACTIVE</string>
<string>continious_integration</string>
</tree-map>
</envVars>
</hudson.slaves.EnvironmentVariablesNodeProperty>
</globalNodeProperties>
</hudson>