web-dev-qa-db-ja.com

Jenkinsで環境変数を設定する方法

以下のようなことができるようになりたいです。

AOEU=$(echo aoeu)

jenkinsにAOEU=aoeuを設定させます。

Jenkinsの 環境変数 セクションではできません。代わりにAOEU='$(echo aoeu)'を設定します。

JenkinsにShellコマンドを評価させ、その出力を環境変数に割り当てる方法を教えてください。

結局、私は、ジョブの実行者を、他のスクリプトに渡したり、他のスクリプトで使用したりできる環境変数に割り当てることができるようにしたいと考えています。

187
Noel Yap

これは、 EnvInjectプラグイン を介して次のように実行できます。

  1. 実行される "Execute Shell"ビルドステップを作成します。

    echo AOEU=$(echo aoeu) > propsfile
    
  2. Inject environment variablesビルドステップを作成し、 "Properties File Path"をpropsfileに設定します。

:このプラグインは(ほとんど)Pipelineプラグインと互換性がありません。

187
malenkiy_scot

最も簡単な方法

ビルド起動時に EnvInject plugin を使用して環境変数を注入できます。例えば:

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

どのようにあなたはそれが働いていると知っている

EnvInject - Variables injected successfully

90

私の場合は、Jenkinsサーバー(Linux)上のすべてのプロジェクトでAntビルドスクリプトを介して使用できるようにJMETER_HOME環境変数を追加する必要がありました。 build.xmlスクリプト ジェンキンスの管理 - システムの設定 - グローバルプロパティ で環境変数を設定するのが最も簡単で邪魔にならない方法です。プラグインは必要ありません。

Manage Jenkins Global Properties


環境変数はAntで利用可能になります。

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

これを追加することで動作することを確認できます。

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

どれが生成されます:

JMeterホーム:〜/ .jmeter

45
vallismortis

あなたはこのようなことを試すことができます

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

EnvInject Plugin aka(Environment Injector Plugin)はJenkinsの設定から環境変数を設定するためのいくつかのオプションを提供します。

Inject environment variables to the build processを選択することによってあなたは得るでしょう:

  • Properties File Path
  • Properties Content
  • Script File Path

  • Script Content

  • そして最後にEvaluated Groovy script


Evaluated Groovy script 実行されたコマンドの結果に基づいて環境変数を設定する可能性を与えます

  • executeメソッドを使う:
    return [HOSTNAME_Shell: 'hostname'.execute().text, 
        DATE_Shell: 'date'.execute().text,
        ECHO_Shell: 'echo hello world!'.execute().text
    ]
  • あるいは明示的なGroovyコードを使って:
    return [HOSTNAME_GROOVY: Java.net.InetAddress.getLocalHost().getHostName(),
        DATE_GROOVY: new Date()
    ] 

(各方法の詳細は、組み込みヘルプ(?)にあります。)


残念ながら、Script Contentから同じことをすることはできません。

フォルダの作成、ファイルのコピーなどの環境設定を目的としたスクリプトファイルを実行します。スクリプトファイルの内容を入力します。上記のプロパティ変数を使用できます。 ただし、スクリプト内で環境変数を追加または上書きしても、ビルドジョブには影響はありません

12
luka5z

Build Env Propagator Pluginがあります これで新しいビルド環境変数を追加できます。

Jenkins Build - Propagate build environment variables

連続する環境変数の構築環境変数の伝播ステップは、以前に定義された環境変数値を上書きします。

9
kenorb

Jenkinsの環境変数をジョブおよびノー​​ドレベルで設定するには、 Environment Injector Plugin を使用します。以下に、それらをジョブレベルで設定する方法を示します。

  1. Jenkins Webインターフェースから、Manage Jenkins > Manage Pluginsに移動してプラグインをインストールします。

Environment Injector Plugin

  1. 仕事に行くConfigurescreen
  2. Add build stepBuildセクションで見つけて、Inject environment variablesを選択します。
  3. 目的の環境変数をVARIABLE_NAME = VALUEパターンとして設定します。私の場合は、USERPROFILE変数の値を変更しました

enter image description here

いくつかの条件(例:ジョブパラメータ)に応じて新しい環境変数を定義する必要がある場合は、この answer を参照できます。

9
Sa Qada

通常は 環境変数 in グローバルプロパティ in システムの設定 で設定できます。

ただし、シェル置換を使用した動的変数の場合は、Jenkins HOMEディレクトリにスクリプトファイルを作成し、それをビルド中に実行することをお勧めします。 SSHアクセスが必要です。例えば。

  1. Jenkinsとしてログインします。Sudo su - jenkinsまたはSudo su - jenkins -s /bin/bash
  2. シェルスクリプトを作成します。

    echo 'export VM_NAME="$JOB_NAME"' > ~/load_env.sh
    echo "export AOEU=$(echo aoeu)" >> ~/load_env.sh
    chmod 750 ~/load_env.sh
    
  3. Jenkins Build( Execute Shell )で、スクリプトとその変数を他のものより先に呼び出します。

    source ~/load_env.sh
    
7
kenorb

EnvInject とよく似た Environment Script PluginGitHub )を試してください。それはあなたがそれのための環境変数を生成する(SCMチェックアウトの後に)ビルドの前にスクリプトを実行することを可能にします。例えば。

Jenkins Build - Regular job - Build Environment

そしてあなたのスクリプトでは、あなたは印刷することができます。その変数を設定するための標準出力へのFOO=bar

既存のPATH-style変数に追加する例:

echo PATH+unique_identifier=/usr/local/bin

スクリプトに必要なことは何でも自由に実行できます。ファイルをcatにするか、プロジェクトのソースツリーから他の言語でスクリプトを実行するかなどです。

4
kenorb

私の場合は、次のオプションを使って環境変数を設定しましたが、

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

Jenkinはこれをサポートしており、これを使ってローカル変数の値にグローバル環境変数としてアクセスできます。次の4つの簡単なステップでこれを達成できます。

ステップ-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

ステップ2

[ビルドステップの追加]ドロップダウンで、[環境変数の注入]を選択します。

enter image description here

enter image description here

ステップ:3

Properties File Pathフィールドに、以前に作成した完全修飾ファイル名(<some_name>.properties)を入力します。

enter image description here

ステップ4

現在はJenkins環境変数として利用可能であり、必要に応じてPost-build-Actionで使用できます。 $ variable_name1 他の環境変数と同じように。

ここ はこれに関するいい記事です

1
lambodar

グルービーな求人ファイルを使用します。

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

どういうわけかSudo su - jenkinsjenkinsuser に私をログインさせない、私は別のアプローチを使用することになった。

外部のプラグインを使わずに、jenkinsのconfig.xml/var/lib/jenkins/config.xml)(Linux/RHELにインストール)を使ってグローバルenv変数を設定することに成功しました。

私は単にjenkinsの追加をやめてからglobalNodePropertiesを追加し、そして再起動するだけです。

例として、変数APPLICATION_ENVIRONMENTSPRING_PROFILES_ACTIVEcontinious_integrationに定義しています。

<?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>
0
prayagupd

これは環境変数を格納してアクセスするためのスニペットです。

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

注:環境変数の値は文字列として渡されます。それをブール値として使用したい場合は、Boolean.parse(env.DISABLE_SQL)を使用して解析する必要があります。

0
barotdeep