web-dev-qa-db-fra.com

Comment définir des variables d'environnement dans Jenkins?

J'aimerais pouvoir faire quelque chose comme:

AOEU=$(echo aoeu)

et avoir Jenkins mis AOEU=aoeu.

La section Variables d'environnement de Jenkins ne le fait pas. Au lieu de cela, il définit AOEU='$(echo aoeu)'.

Comment faire en sorte que Jenkins évalue une commande Shell et affecte le résultat à une variable d'environnement?

Finalement, je veux pouvoir affecter l'exécuteur d'un travail à une variable d'environnement pouvant être transmise ou utilisée par d'autres scripts.

178
November Yankee

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

  1. Créez une étape de génération "Execute Shell" qui s'exécute:

    echo AOEU=$(echo aoeu) > propsfile
    
  2. Créez une étape de construction Inject variables d’environnement} et définissez "Propriétés du chemin du fichier" sur propsfile.

Note: Ce plugin n'est (pour la plupart) pas compatible avec le plugin Pipeline.

181
malenkiy_scot

Le plus simple

Vous pouvez utiliser plugin EnvInject pour injecter des variables d’environnement au démarrage de la construction. Par exemple:

Add key=value (bash OK!) under 'Build Environment'->'Inject environment variables to the build process' -> 'Properties Content'

Comment tu sais que ça marche

EnvInject - Variables injected successfully

88
theFunkyEngineer

Dans mon cas, j’avais besoin d’ajouter la variable d’environnement JMETER_HOME pour qu’elle soit disponible via mes scripts de génération Ant dans tous les projets du serveur Jenkins (Linux), de manière à ne pas interférer avec mon environnement de construction local (Windows et Mac) dans le répertoire. build.xml script. Définir la variable d'environnement via Manage Jenkins - Configurer le système - Les propriétés globales était le moyen le plus simple et le moins intrusif d'y parvenir. Aucun plug-in n'est nécessaire.

 Manage Jenkins Global Properties


La variable d'environnement est alors disponible dans Ant via:

<property environment="env" />
<property name="jmeter.home" value="${env.JMETER_HOME}" />

Ceci peut être vérifié pour fonctionner en ajoutant:

<echo message="JMeter Home: ${jmeter.home}"/>

Qui produit:

JMeter Home: ~/.jmeter

43
vallismortis

Plugin EnvInject aka (plug-in d'injecteur d'environnement) vous donne plusieurs options pour définir les variables d'environnement à partir de la configuration de 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 une variable d'environnement en fonction du résultat de la commande exécutée:

  • avec la méthode execute:
    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()
    ] 

(Vous trouverez plus de détails sur chaque méthode dans l'aide intégrée (?))


Malheureusement, vous ne pouvez pas faire la même chose à partir de Script Content car il est écrit:

Exécutez un fichier de script visant à définir un environnement tel que la création de dossiers, copie de fichiers, etc. Donnez le contenu du fichier de script. Vous peut utiliser les variables de propriétés ci-dessus. Cependant, ajouter ou remplacer Les variables d'environnement du script n'ont aucun impact sur le travail de construction.

13
luka5z

Vous pouvez essayer quelque chose comme ça

stages {
        stage('Build') {
            environment { 
                    AOEU= sh (returnStdout: true, script: 'echo aoeu').trim()
                }
            steps {
                sh 'env'
                sh 'echo $AOEU'
            }
        }
    }
11
JSixface

Il existe Build Env Propagator Plugin qui vous permet d’ajouter de nouvelles variables d’environnement de construction, par exemple.

 Jenkins Build - Propagate build environment variables

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

9
kenorb

Vous pouvez utiliser Environment Injector Plugin pour définir les variables d’environnement dans Jenkins au niveau des tâches et des nœuds. Ci-dessous, je montrerai comment les définir au niveau de l'emploi.

  1. À partir de l'interface Web Jenkins, accédez à Manage Jenkins > Manage Plugins et installez le plug-in.

 Environment Injector Plugin

  1. Accéder à votre écran Configure
  2. Recherchez Add build step dans la section Build et sélectionnez Inject environment variables.
  3. Définissez la variable d'environnement souhaitée comme suit: VARIABLE_NAME = pattern VALUE. Dans mon cas, j'ai changé la valeur de la variable USERPROFILE

 enter image description here

Si vous devez définir une nouvelle variable d’environnement en fonction de certaines conditions (paramètres de travail, par exemple), vous pouvez vous référer à cette answer .

8
Sa Qada

Normalement, vous pouvez configurer Variables d'environnement in Propriétés globales in Configure System .

Cependant, pour les variables dynamiques avec substitution 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 requis. Par exemple.

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

    echo 'export VM_NAME="$JOB_NAME"' > ~/load_env.sh
    echo "export AOEU=$(echo aoeu)" >> ~/load_env.sh
    chmod 750 ~/load_env.sh
    
  3. Dans Jenkins Build ( Execute Shell ), appelez le script et ses variables avant toute autre opération, par exemple.

    source ~/load_env.sh
    
5
kenorb

Essayez Environment Script Plugin ( GitHub ) qui est très similaire à EnvInject . Il vous permet d'exécuter un script avant la construction (après extraction de SCM) qui génère des variables d'environnement pour celui-ci. Par exemple.

 Jenkins Build - Regular job - Build Environment

et dans votre script, vous pouvez imprimer, par exemple, FOO=bar à la sortie standard pour définir cette variable.

Exemple pour ajouter une variable PATH- existante:

echo PATH+unique_identifier=/usr/local/bin

Vous êtes donc libre de faire tout ce dont vous avez besoin dans le script - soit cat un fichier, soit exécuter un script dans une autre langue à partir de l'arbre source de votre projet, etc.

4
kenorb

Pour une raison quelconque, Sudo su - jenkins ne me connecte pas à jenkinsuser , j’ai utilisé une approche différente.

J'ai réussi à définir les variables env globales à l'aide de jenkins config.xml à /var/lib/jenkins/config.xml (installé dans Linux/RHEL) - sans l'aide de plugins externes.

Je devais simplement arrêter jenkins ajouter puis ajouter globalNodeProperties, puis redémarrer.

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
prayagupd

Jenkin dispose d'un support intégré pour cela, qui vous permet d'accéder à la valeur des variables locales en tant que variables d'environnement globales. Vous pouvez y parvenir en suivant 4 étapes simples.

Étape 1

 enter image description here

............................
rm -f <some_name>.properties
touch <Some_name>.properties
............................
#pass the variable name you want to access as an env variable
echo variable_name1=$some_value1 >> <some_name>.properties
echo variable_name2=$some_value2 >> <some_name>.properties
............................
echo variable_name3=$some_value3 >> <some_name>.properties

Étape 2

Dans la liste déroulante "Ajouter l'étape de construction", sélectionnez "Variable d'environnement d'injection}".

 enter image description here

 enter image description here

Étape 3

Entrez le nom de fichier complet que vous avez créé précédemment (<some_name>.properties) dans le champ Propriétés du chemin du fichier.

 enter image description here

Étape 4

Désormais, elle est disponible en tant que variable d'environnement Jenkins et vous pouvez l'utiliser selon vos besoins dans Post-build-Action. $ nom_variable1 comme toute autre variable d'environnement.

Ici est un billet de Nice à ce sujet

1
lambodar

Dans mon cas, j'avais configuré les variables d'environnement à l'aide de l'option suivante et cela a fonctionné.

Manage Jenkins -> Configure System -> Global Properties -> Environment Variables -> Add
0
nik

Nous utilisons un fichier de travail groovy:

description('')
steps {
    environmentVariables {
        envs(PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: true)
    }
}
0
techguy2000

C'est l'extrait permettant de stocker la variable d'environnement et d'y accéder.

node {
   withEnv(["ENABLE_TESTS=true", "DISABLE_SQL=false"]) {
      stage('Select Jenkinsfile') {
          echo "Enable test?: ${env.DEVOPS_SKIP_TESTS}
          customStep script: this
      }
   }
}

Remarque: La valeur de la variable d'environnement est fournie sous forme de chaîne. Si vous souhaitez l'utiliser comme booléen, vous devez l'analyser à l'aide de Boolean.parse (env.DISABLE_SQL).

0
barotdeep