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


228

私は次のようなことができるようになりたいです:

AOEU=$(echo aoeu)

ジェンキンスを設定しAOEU=aoeuます。

Jenkinsの「環境変数」セクションはそれを行いません。代わりに、が設定されますAOEU='$(echo aoeu)'

Jenkinsにシェルコマンドを評価させ、出力を環境変数に割り当てるにはどうすればよいですか?

最終的には、ジョブのエグゼキューターを、他のスクリプトに渡したり使用したりできる環境変数に割り当てることができるようにしたいと考えています。


2
EnvInjectプラグインには、深刻なセキュリティ上の脆弱性があります。現在、Jenkinsはこのstackoverflow.com/a/53430757/1753177の
ランボダー

@lambodarリンクが問題につながる
Z.コクラン

@ Z.Cochrane、それは作者によって削除された回答へのリンクです。
Noel Yap

回答:


217

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

  1. 実行する「Execute shell」ビルドステップを作成します。

    echo AOEU=$(echo aoeu) > propsfile
    
  2. Inject環境変数のビルドステップを作成し、[Properties File Path]をに設定しますpropsfile

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


4
EnvInjectは、上記の状況を処理しません。[EnvInject]-環境変数としてプロパティコンテンツを注入します。[EnvInject]-未解決の「AOEU」変数の設定を解除します。
Noel Yap

1
このソリューションはUnixシェル構文を使用しており、Windowsでは機能しません。
fbmd 2015

2
@fbmd Windowsで実行しています。あなたはあなたshがパスにいることを確認する必要があります。
Custodio 2015

2
EnvInjectは、「実行シェル」がエラーで終了すると、ビルドが注入部分に進まないため機能しません。
Chadi

1
@ Vitim.usは、fooその特定のシェルアクションでエクスポートされますが、他のアクションではエクスポートされません。
Noel Yap

109

最も簡単な方法

EnvInjectプラグインを使用して、ビルドの起動時に環境変数を挿入できます。例えば:

'Build Environment'-> 'Inject environment variables to the build process'-> 'Properties Content'の下にkey = value(bash OK!)を追加します

それが機能していることを知る方法

EnvInject-変数は正常に注入されました


5
シェルコマンドの出力に基づいて値を設定してみてください。
ノエルヤップ

1
@NoelYapも機能しますが、最後に行がに評価される限りkey=value。私のユースケースでは、私は完全にラインを生成: cat app/build.gradle | grep "def majorVersion" | python -c 'import sys,re,os; print("VERSION_NUMBER="+re.findall(r"[\d+\.]+", sys.stdin.read())[0]+os.environ["BUILD_NUMBER"])'
kenny_k

@theFunkyEngineerどのバージョンのEnvInjectを使用していますか?1.91.3では、あなたのようなコマンドは "cat = app ..."として解釈されます。この機能がサポートされていればすばらしいと思いますが、この機能が誤って機能していたのではないかと感じています。
killthrush

1
シェルコマンドの出力に値を割り当てようとしても、私にとっては機能しません。BUILD_DATE=date "+%Y-%m-%d-%H_%M_%S"またBUILD_DATE=$(date "+%Y-%m-%d-%H_%M_%S")、機能BUILD_DATE=`date "+%Y-%m-%d-%H_%M_%S"`しませんでした
scottysseus


56

私の場合、JMETER_HOMEJenkinsサーバー(Linux)上のすべてのプロジェクトでAntビルドスクリプトを介して利用できるように、ローカルビルド環境(WindowsおよびMac)に干渉しないように環境変数を追加する必要がありました。build.xmlスクリプト。Jenkinsの管理-システムの構成-グローバルプロパティを介して環境変数を設定することが、これを実現するための最も簡単で最も煩わしくない方法でした。プラグインは必要ありません。

Jenkinsグローバルプロパティの管理


環境変数はAntで次のように使用できます。

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

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

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

生成されるもの:

JMeterホーム:〜/ .jmeter


これはグローバルプロパティです。Jenkinsのすべてのジョブに影響します。このプロパティが1つのジョブに必要だとしたら?
IgorGanapolsky 2016年

Jenkinsの管理-システムの構成-グローバルプロパティに以下を追加しました:git /path/to/my/gitおよびPATH+git /path/to/my/git。ただし、gita からアクセスしようとするとJenkins pipeline script、次のようになります/bin/sh: git: command not found
オクタビアン2017年

1
JAVA_HOME環境変数を設定するだけで、この答えが役に立ちました。
Sandoval0992

19

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

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

環境インジェクタープラグイン

  1. 仕事Configure画面に移動
  2. セクションを検索Add build stepBuildて選択Inject environment variables
  3. 必要な環境変数をVARIABLE_NAME = VALUEパターンとして設定します。私の場合、USERPROFILE変数の値を変更しました

ここに画像の説明を入力してください

いくつかの条件(ジョブパラメータなど)に応じて新しい環境変数を定義する必要がある場合は、この回答を参照してください。


16

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

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

これは解析しません。
rjurney 2017年

2
このフォーマットは、Jenkinsfileパイプラインプロジェクト用です。このスニペットを使用している職種は何ですか?
JSixface 2018年

1
これJenkinsfileはパイプライン(ジョブではない)で完全に機能します!それは素晴らしいです、ありがとう!
マティエロ

14

EnvInjectプラグイン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

あるビルドのEnvプロパゲータプラグインの新しいビルド環境変数を追加することができます、例えば、

Jenkins Build-ビルド環境変数を伝播する

後続のビルド環境変数の伝搬ステップは、以前に定義された環境変数値をオーバーライドします。


ありがとうございました!Build Env Propagatorプラグインは試してみたところ機能しました。ビルド手順中に環境変数を設定できるのは素晴らしいことです。
twasbrillig

10

私の場合、次のオプションを使用して環境変数を構成しましたが、それは機能しました-

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

これが最良の方法です
ロンググエン

7

通常、Configure SystemのGlobalプロパティ環境変数を設定できます。

ただし、シェル置換を伴う動的変数の場合は、Jenkins HOME dirにスクリプトファイルを作成し、ビルド中に実行することができます。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(実行シェル)で、スクリプトとその変数を最初に起動します。例:

    source ~/load_env.sh
    

残念ながら私にはうまくいきませんでした。あとsudo su - jenkins、まだecho $USERくれrootます。
prayagupd

@prayagupd完全なログインをシミュレートする必要があるため、su -lパラメーターを使用してそれを行うか、そうでない場合は別の質問をします。
ケノーブ2017年

@kenorbスクリプトを呼び出した後、env変数を再度読み取るにはどうすればよいですか?たとえば、これは機能しませんsh "" "source〜/ load_env.sh echo" VM_NAME:$ VM_NAME "echo" VM_NAME:$ {VM_NAME} "" ""
aung

7

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

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)を使用して解析する必要があります。


4

EnvInjectとよく似た環境スクリプトプラグインGitHub)を試してください。ビルドの前(SCMチェックアウト後)にスクリプトを実行して、そのための環境変数を生成できます。例えば

Jenkins Build-通常のジョブ-ビルド環境

スクリプトでは、たとえばFOO=bar標準出力に出力して、その変数を設定できます。

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

echo PATH+unique_identifier=/usr/local/bin

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



0

何らかの理由でユーザーsudo su - jenkinsログが記録されないため、別の方法を使用してしまいました。jenkins

私はジェンキンスconfig.xmlを使用してグローバル環境変数を設定することに成功しました/var/lib/jenkins/config.xml外部プラグインを使用せずに、(Linux / RHELにインストール)。

私は単にjenkins addを停止し、次にaddを停止してから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>

-3

私たちはグルーヴィーなジョブファイルを使用します:

description('')
steps {
    environmentVariables {
        envs(PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: true)
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.