it-swarm.com.de

Wie man Umgebungsvariablen in Jenkins setzt?

Ich würde gerne etwas tun können wie:

AOEU=$(echo aoeu)

und Jenkins AOEU=aoeu gesetzt haben.

Die Umgebungsvariablen in Jenkins tun das nicht. Stattdessen wird AOEU='$(echo aoeu)' festgelegt.

Wie kann ich Jenkins dazu bringen, einen Shell-Befehl auszuwerten und die Ausgabe einer Umgebungsvariablen zuzuweisen?

Schließlich möchte ich in der Lage sein, den Executor eines Jobs einer Umgebungsvariablen zuzuweisen, die an andere Skripte übergeben oder von diesen verwendet werden kann.

178
November Yankee

Dies kann über EnvInject Plugin auf folgende Weise erfolgen:

  1. Erstellen Sie einen Buildschritt "Execute Shell", der ausgeführt wird:

    echo AOEU=$(echo aoeu) > propsfile
    
  2. Erstellen Sie einen Inject-Umgebungsvariablen-Erstellungsschritt, und legen Sie "Properties File Path" auf propsfile fest.

Note: Dieses Plugin ist (meistens) nicht mit dem Pipeline-Plugin kompatibel.

181
malenkiy_scot

Der einfachste Weg

Sie können EnvInject plugin verwenden, um Umgebungsvariablen beim Build-Start einzuspritzen. Zum Beispiel:

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

Woher weißt du, dass es funktioniert?

EnvInject - Variables injected successfully

88

In meinem Fall musste ich die Umgebungsvariable JMETER_HOME hinzufügen, um über meine Ant-Build-Skripts in allen Projekten auf meinem Jenkins-Server (Linux) verfügbar zu sein, und zwar auf eine Weise, die meine lokale Build-Umgebung (Windows und Mac) im System nicht beeinträchtigt build.xml-Skript. Das Einstellen der Umgebungsvariable über Manage Jenkins - Configure System - Globale Eigenschaften war der einfachste und am wenigsten aufdringliche Weg, dies zu erreichen. Es sind keine Plug-Ins erforderlich.

 Manage Jenkins Global Properties


Die Umgebungsvariable ist dann in Ant verfügbar über:

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

Dies kann durch Hinzufügen von Werken überprüft werden:

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

Was produziert:

JMeter Home: ~/.jmeter

43
vallismortis

EnvInject Plugin aka (Environment Injector Plugin) bietet verschiedene Optionen zum Festlegen von Umgebungsvariablen aus der Jenkins-Konfiguration.

Durch Auswahl von Inject environment variables to the build process erhalten Sie:

  • Properties File Path
  • Properties Content
  • Script File Path

  • Script Content

  • und schließlich Evaluated Groovy script


Evaluated Groovy script gibt Ihnen die Möglichkeit, Umgebungsvariable basierend auf dem Ergebnis des ausgeführten Befehls zu setzen:

  • mit execute Methode:
    return [HOSTNAME_Shell: 'hostname'.execute().text, 
        DATE_Shell: 'date'.execute().text,
        ECHO_Shell: 'echo hello world!'.execute().text
    ]
  • oder mit explizitem Groovy code:
    return [HOSTNAME_GROOVY: Java.net.InetAddress.getLocalHost().getHostName(),
        DATE_GROOVY: new Date()
    ] 

(Weitere Details zu den einzelnen Methoden finden Sie in der integrierten Hilfe (?).)


Leider können Sie mit Script Content nicht dasselbe machen, da es heißt:

Führen Sie eine Skriptdatei aus, um eine Umgebung wie das Erstellen von .__ festzulegen. Ordner, Kopieren von Dateien usw. Geben Sie den Inhalt der Skriptdatei an. Sie kann die obigen Eigenschaftsvariablen verwenden. Hinzufügen oder Überschreiben von Umgebungsvariablen im Skript haben keine Auswirkungen auf die Job bauen.

13
luka5z

Sie können so etwas versuchen

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

Es gibt Build Env Propagator Plugin , mit dem Sie neue Build-Umgebungsvariablen hinzufügen können, z.

 Jenkins Build - Propagate build environment variables

Jeder nachfolgende Schritt "Build-Umgebungsvariablen weitergeben" überschreibt zuvor definierte Umgebungsvariablenwerte.

9
kenorb

Mit Environment Injector Plugin können Sie Umgebungsvariablen in Jenkins auf Job- und Knotenebene festlegen. Nachfolgend werde ich zeigen, wie man sie auf Jobebene einstellt.

  1. Gehen Sie von der Jenkins-Weboberfläche zu Manage Jenkins > Manage Plugins und installieren Sie das Plugin.

 Environment Injector Plugin

  1. Gehen Sie zu Ihrem Jobbildschirm Configure
  2. Suchen Sie Add build step im Abschnitt Build und wählen Sie Inject environment variables aus.
  3. Legen Sie die gewünschte Umgebungsvariable als VARIABLE_NAME = VALUE-Muster fest. In meinem Fall habe ich den Wert der Variablen USERPROFILE geändert

 enter image description here

Wenn Sie abhängig von bestimmten Bedingungen (z. B. Jobparameter) eine neue Umgebungsvariable definieren müssen, können Sie auf diese Antwort verweisen.

8
Sa Qada

Normalerweise können Sie Umgebungsvariablen in Globale Eigenschaften in System konfigurieren konfigurieren.

Bei dynamischen Variablen mit Shell-Ersetzung möchten Sie jedoch möglicherweise eine Skriptdatei in Jenkins HOME-Verzeichnis erstellen und während des Builds ausführen. Der SSH-Zugriff ist erforderlich. Zum Beispiel.

  1. Melden Sie sich als Jenkins an: Sudo su - jenkins oder Sudo su - jenkins -s /bin/bash
  2. Erstellen Sie ein Shell-Skript, z.

    echo 'export VM_NAME="$JOB_NAME"' > ~/load_env.sh
    echo "export AOEU=$(echo aoeu)" >> ~/load_env.sh
    chmod 750 ~/load_env.sh
    
  3. Rufen Sie in Jenkins Build ( Execute Shell ) das Skript und seine Variablen vor allem anderen auf, z.

    source ~/load_env.sh
    
5
kenorb

Probieren Sie das Environment Script Plugin ( GitHub ) aus, das EnvInject sehr ähnlich ist. Damit können Sie vor dem Build (nach dem SCM-Checkout) ein Skript ausführen, das Umgebungsvariablen für es generiert. Z.B.

Jenkins Build - Regular job - Build Environment

und in Ihrem Skript können Sie z. FOO=bar an die Standardausgabe, um diese Variable festzulegen.

Beispiel zum Anhängen an eine vorhandene Variable des Typs PATH-style:

echo PATH+unique_identifier=/usr/local/bin

Sie können also alles tun, was Sie im Skript benötigen - entweder cat eine Datei oder ein Skript in einer anderen Sprache aus dem Quellbaum Ihres Projekts ausführen usw.

4
kenorb

Aus irgendeinem Grund meldet sich Sudo su - jenkins nicht bei jenkinsuser . Ich habe am Ende einen anderen Ansatz gewählt.

Ich konnte die globalen env-Variablen mithilfe von jenkins config.xml um /var/lib/jenkins/config.xml (installiert unter Linux/RHEL) einstellen - ohne externe Plugins.

Ich musste einfach Jenkins hinzufügen stoppen, dann globalNodeProperties hinzufügen und dann neu starten.

Beispiel: Ich definiere die Variablen APPLICATION_ENVIRONMENT und SPRING_PROFILES_ACTIVE bis continious_integration unten.

<?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 hat hierfür eine integrierte Unterstützung, mit der Sie als globale Umgebungsvariablen auf den Wert lokaler Variablen zugreifen können. Sie können dies in den folgenden 4 einfachen Schritten erreichen.

Schritt 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

Schritt 2

Wählen Sie unter "Add Build Step" im Dropdown-Menü "Inject-Umgebungsvariable" aus.

 enter image description here

 enter image description here

Schritt 3

Geben Sie den vollständig qualifizierten Dateinamen, den Sie zuvor erstellt haben (<some_name>.properties), in das Feld Properties File Path ein.

 enter image description here

Schritt 4

Jetzt ist es als Jenkins-Umgebungsvariable verfügbar und kann nach Bedarf in Post-Build-Action verwendet werden. $ Variablenname1 wie jede andere Umgebungsvariable.

Hier ist ein schöner Beitrag dazu

1
lambodar

In meinem Fall hatte ich Umgebungsvariablen mit der folgenden Option konfiguriert, und es funktionierte:

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

Wir verwenden eine groovy Jobdatei:

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

Dies ist das Snippet, um Umgebungsvariablen zu speichern und darauf zuzugreifen.

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

Anmerkung: Der Wert der Umgebungsvariablen wird als Zeichenfolge ausgegeben. Wenn Sie es als Boolean verwenden möchten, müssen Sie es mit Boolean.parse (env.DISABLE_SQL) analysieren.

0
barotdeep