以下のようなことができるようになりたいです。
AOEU=$(echo aoeu)
jenkinsにAOEU=aoeu
を設定させます。
Jenkinsの 環境変数 セクションではできません。代わりにAOEU='$(echo aoeu)'
を設定します。
JenkinsにShellコマンドを評価させ、その出力を環境変数に割り当てる方法を教えてください。
結局、私は、ジョブの実行者を、他のスクリプトに渡したり、他のスクリプトで使用したりできる環境変数に割り当てることができるようにしたいと考えています。
これは、 EnvInjectプラグイン を介して次のように実行できます。
実行される "Execute Shell"ビルドステップを作成します。
echo AOEU=$(echo aoeu) > propsfile
Inject environment variablesビルドステップを作成し、 "Properties File Path"をpropsfile
に設定します。
注 :このプラグインは(ほとんど)Pipelineプラグインと互換性がありません。
私の場合は、Jenkinsサーバー(Linux)上のすべてのプロジェクトでAntビルドスクリプトを介して使用できるようにJMETER_HOME
環境変数を追加する必要がありました。 build.xml
スクリプト ジェンキンスの管理 - システムの設定 - グローバルプロパティ で環境変数を設定するのが最も簡単で邪魔にならない方法です。プラグインは必要ありません。
環境変数はAntで利用可能になります。
<property environment="env" />
<property name="jmeter.home" value="${env.JMETER_HOME}" />
これを追加することで動作することを確認できます。
<echo message="JMeter Home: ${jmeter.home}"/>
どれが生成されます:
JMeterホーム:〜/ .jmeter
あなたはこのようなことを試すことができます
stages {
stage('Build') {
environment {
AOEU= sh (returnStdout: true, script: 'echo aoeu').trim()
}
steps {
sh 'env'
sh 'echo $AOEU'
}
}
}
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
から同じことをすることはできません。
フォルダの作成、ファイルのコピーなどの環境設定を目的としたスクリプトファイルを実行します。スクリプトファイルの内容を入力します。上記のプロパティ変数を使用できます。 ただし、スクリプト内で環境変数を追加または上書きしても、ビルドジョブには影響はありません 。
Build Env Propagator Pluginがあります これで新しいビルド環境変数を追加できます。
連続する環境変数の構築環境変数の伝播ステップは、以前に定義された環境変数値を上書きします。
Jenkinsの環境変数をジョブおよびノードレベルで設定するには、 Environment Injector Plugin を使用します。以下に、それらをジョブレベルで設定する方法を示します。
Manage Jenkins > Manage Plugins
に移動してプラグインをインストールします。Configure
screenAdd build step
をBuild
セクションで見つけて、Inject environment variables
を選択します。いくつかの条件(例:ジョブパラメータ)に応じて新しい環境変数を定義する必要がある場合は、この answer を参照できます。
通常は 環境変数 in グローバルプロパティ in システムの設定 で設定できます。
ただし、シェル置換を使用した動的変数の場合は、Jenkins HOMEディレクトリにスクリプトファイルを作成し、それをビルド中に実行することをお勧めします。 SSHアクセスが必要です。例えば。
Sudo su - jenkins
またはSudo su - jenkins -s /bin/bash
シェルスクリプトを作成します。
echo 'export VM_NAME="$JOB_NAME"' > ~/load_env.sh
echo "export AOEU=$(echo aoeu)" >> ~/load_env.sh
chmod 750 ~/load_env.sh
Jenkins Build( Execute Shell )で、スクリプトとその変数を他のものより先に呼び出します。
source ~/load_env.sh
EnvInject とよく似た Environment Script Plugin ( GitHub )を試してください。それはあなたがそれのための環境変数を生成する(SCMチェックアウトの後に)ビルドの前にスクリプトを実行することを可能にします。例えば。
そしてあなたのスクリプトでは、あなたは印刷することができます。その変数を設定するための標準出力へのFOO=bar
。
既存のPATH
-style変数に追加する例:
echo PATH+unique_identifier=/usr/local/bin
スクリプトに必要なことは何でも自由に実行できます。ファイルをcat
にするか、プロジェクトのソースツリーから他の言語でスクリプトを実行するかなどです。
私の場合は、次のオプションを使って環境変数を設定しましたが、
Manage Jenkins -> Configure System -> Global Properties -> Environment Variables -> Add
Jenkinはこれをサポートしており、これを使ってローカル変数の値にグローバル環境変数としてアクセスできます。次の4つの簡単なステップでこれを達成できます。
ステップ-1
............................
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
[ビルドステップの追加]ドロップダウンで、[環境変数の注入]を選択します。
ステップ:3
Properties File Pathフィールドに、以前に作成した完全修飾ファイル名(<some_name>.properties
)を入力します。
ステップ4
現在はJenkins環境変数として利用可能であり、必要に応じてPost-build-Actionで使用できます。 $ variable_name1 他の環境変数と同じように。
ここ はこれに関するいい記事です
グルービーな求人ファイルを使用します。
description('')
steps {
environmentVariables {
envs(PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: true)
}
}
どういうわけかSudo su - jenkins
がjenkins
user に私をログインさせない、私は別のアプローチを使用することになった。
外部のプラグインを使わずに、jenkinsのconfig.xml
(/var/lib/jenkins/config.xml
)(Linux/RHELにインストール)を使ってグローバルenv変数を設定することに成功しました。
私は単にjenkinsの追加をやめてからglobalNodeProperties
を追加し、そして再起動するだけです。
例として、変数APPLICATION_ENVIRONMENT
とSPRING_PROFILES_ACTIVE
をcontinious_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>
これは環境変数を格納してアクセスするためのスニペットです。
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)を使用して解析する必要があります。