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.

168
demandé sur vallismortis 2012-05-16 23:21:48

10 réponses

Cela peut être fait via envinject plugin de la manière suivante:

  1. Créez une étape de construction "Execute shell" qui s'exécute:

    echo AOEU=$(echo aoeu) > propsfile
    
  2. 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.

171
répondu malenkiy_scot 2018-04-28 15:15:18

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:

Ajouter clé = valeur (bash OK!) sous l'Environnement de compilation'->'Injecter des variables d'environnement pour le processus de construction' -> 'Propriétés'

Comment vous savez que ça marche

EnvInject-Variables injectées avec succès

83
répondu theFunkyEngineer 2016-07-09 21:00:35

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.

Gérer Les Propriétés Globales Jenkins


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

37
répondu vallismortis 2016-08-17 18:52:34

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 .

12
répondu luka5z 2016-05-14 07:22:40

Il y a Build Env Propagator Plugin qui vous permet d'ajouter de nouvelles variables d'environnement de construction, par exemple

Jenkins Build-propager les variables d'environnement de construction

Toute étape successive de propagation des variables d'environnement de construction remplacera les valeurs de variables d'environnement précédemment définies.

9
répondu kenorb 2018-02-08 01:19:07

, 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'
            }
        }
    }
7
répondu JSixface 2017-07-24 20:37:38

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.

  1. depuis L'interface Web Jenkins, allez à Manage Jenkins > Manage Plugins et installez le plugin.

Greffon D'Injecteur D'Environnement

  1. Aller à votre travail Configure écran
  2. Trouver Add build step dans Build section et sélectionnez Inject environment variables
  3. 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

entrez la description de l'image ici

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 .

7
répondu Sa Qada 2017-11-27 12:46:38

, 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.

  1. connectez-vous en tant que Jenkins: sudo su - jenkins ou sudo su - jenkins -s /bin/bash
  2. Créer un script shell, par exemple:

    echo 'export VM_NAME="$JOB_NAME"' > ~/load_env.sh
    chmod 750 ~/load_env.sh
    
  3. Dans Jenkins Build ( Exécuter shell ), appelle le script et ses variables avant toute autre chose, par exemple

    source ~/load_env.sh
    
4
répondu kenorb 2018-08-03 09:12:07

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

Jenkins Build-emploi régulier-environnement de construction

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.

3
répondu kenorb 2018-02-08 01:18:57

, 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>
1
répondu prayagupd 2017-05-23 12:18:18