Jenkins / Hudson環境変数


101

ユーザーjenkinsthatsが$PATH何かに設定したJenkinsを実行しています。JenkinsのWebインターフェイスにアクセスすると、[ システムのプロパティ]ウィンドウ(http://$host/systemInfo)に別の$PATHます。

CentosにJenkinsをインストールしました。JenkinsのWebサイトからネイティブrpmを使用しています。インストールで提供される起動スクリプトを使用しています。sudo /etc/init.d/jenkins start

誰もがなぜそれが起こるのか私に説明できますか?


1
jenkinsとしてログインした場合echo $PATH、jenkinsに表示されるものと一致しますか?
Upgradingdave

3
@デイブいいえ、一致しません。理由がわかりません
マイケル

8
これが一致しない理由は、jenkinsユーザーとしてログインするとログインシェルが呼び出されるのに対し、jenkinsは/ bin / sh -xe {your script}を実行するだけなので、同じスクリプトセットを実行しません。 PATH環境変数を変更します。実際、スクリプトのセットは、インストールした* nixやシェルの特定のフレーバーによって異なります。私はjenkinsを使用してAWS Linux AMIでテストしましたが、残念ながら/ etc / profile /etc/profile.d/xxx.sh / etc / bashrc / etc / environment〜/ .bash_profile〜/ .profile〜/ .bashrcはどれもできませんでした/ bin / shに渡されるPATHに影響を与える
Luke

回答:


141

マイケル、

2つのこと:

Jenkinsがコンピューターに接続すると、shシェルではなくbashシェルに移動します(少なくとも、これは私が気づいたことです-私は間違っている可能性があります)。したがって、bashrcファイルの$ PATHに加えた変更は考慮されません。

また、ローカルシェル(個人的にsshを実行するシェル)で$ PATHに加えた変更は、Jenkinsには表示されません。

Jenkinsが使用するパスを変更するには、2つのオプション(AFAIK)があります。

1)あなたの /etc/profileファイルを、必要なパスを追加します

2)スレーブの設定ページに移動し、PATH値を指定して環境変数を追加します。$PATH:/followed-by/paths/you/want/to/add

2番目のオプションを使用する場合、システム情報には表示されませんが、ビルドには追加されたパスが表示されます。


2
この答えは私にとってはうまくいきましたが、Jenkinsが設定ページに書き込む内容に非常に敏感であることに気付きました。スペースのあるパスを処理できませんでした。
miguelSantirso 2012年

はい、ありますが、UNIXシェルでスペースを含むパスを入力すると、スペースは通常 ``文字でエスケープされます。したがって、パスが "/ opt / bin / My Folder Name"の場合は、代わりに "/ opt / bin / My \ Folder \ Name"を試してください。これにより、スペースがエスケープされ、使用できるようになります。
サーガル

11
解決策2は方法です。
ガガリン

2
フォローアップ:私のUbuntuシステムでは、jenkinsサービスは新興の仕事なので、古いsysvinitスタブスクリプトを変更していました。間違った場所。/etc/init/jenkins.confスクリプトを微調整し、PATHを更新してからexecのJavaを実行すると、動作するようです。
Stabledog 2014年

15
小さな暗いコーナーがあります。jenkinsマスターは、カスタマイズにパッチを適用するために、スレーブからの環境変数をキャッシュします。したがって、スレーブ(システムまたはユーザー)の環境変数を変更した場合は、マスターを再起動してスレーブ構成を更新する必要があります。
Thinkeye 2015年

36

私はこの問題に遭遇し続けましたが、今追加するだけです:

source /etc/profile

ビルドプロセスの最初のステップとして。これで、Jenkinsがスムーズに動作するように、以降のすべてのルールが読み込まれました。


6
えっ?詳しくは…どこに追加しますか?どうやって?いつ?Windowsで動作しますか?
HX_unbanned

ビルドの一部としてシェルコマンドを実行していると思います。入れてsource /etc/profileそのビルドの最初のコマンドとして>シェル>コマンドのテキストエリアを実行します。
ブライアンケネディ

2
Macで動作します。また、/usr/local/binで指定されているようなパスが見つかり/etc/paths/etc/pathsによって使用され/usr/libexec/path_helper、path_helperがで実行され/etc/profileます。
hiroshi

1
あなたは私の日を救った:)
RameshVel

/ etc / profileをソーシングすると、ジョブに「echo $ PATH」のデバッグを追加したときにパスが表示されますが、ジョブの環境変数を見ると、同じではありません。
Elijah Lynn

23

/etc/sysconfig/jenkinsファイルを編集して、環境変数などを変更することもできsource /etc/profileます。ファイルの最後に追加しただけです。/etc/profileすべての適切なPATH変数が設定されています。これを行うときは、必ずJenkinsを再起動してください

/etc/init.d/jenkins restart

ナシやフィッシングなどを別のパスにインストールするZendServer CEを実行しているので、これは役に立ちました。また、LD_LIBRARY_PATH OracleクライアントとJenkinsで発生エラーは発生。


これは重要なコメントです。または、{jenkins-url} / restartまたは{jenkins-url} / safeRestartからjenkinsを再起動してください。私はUbuntuのホスト上でもの/ etc /環境を編集して、パスの変更は、ピックアップされていない理由で私の頭を叩いた- {ジェンキンス-URL} /システム情報によって検証としてRESTARTは、それを修正します
KERT

他のすべてが失敗しました、これが機能した唯一のものです!私はそれがもっと普及していて、最後の数時間を無駄にしないといいのですが!
Brad Bonkoski、2015

15

私が試した/etc/profile~/.profileそして~/.bash_profile、それらのどれも働きました。~/.bashrcjenkinsスレーブアカウントの編集が実行されたことがわかりました。


3
これは、非ログインシェルがどちら/etc/profileも読み取らないためです~/.profile
Vincenzo

9

この回答に関する情報は古くなっています。[Jenkinsの構成]に移動する必要があります。次に、そこから環境変数のキーと値のペアをクリックして追加できます。

例えば:export MYVAR=testだろうMYVAR鍵であり、かつtest価値あります。


5

私の新しいEC2インスタンスでは、Jenkinsユーザーの.profileのPATHに新しい値を追加してから、tomcatを再起動するだけでうまくいきました。

設定が異なる古いインスタンスでは、Sagarの回答の#2を使用することのみが機能しました(つまり、.profile、.bash *が機能しませんでした)。


4

そのためのプラグインを2つ見つけました。1つはファイルから値をロードし、もう1つはジョブ構成画面で値を構成できます。

Envfileプラグイン —このプラグインを使用すると、ファイルを介して環境変数を設定できます。ファイルの形式は、標準のJavaプロパティファイル形式である必要があります。

EnvInjectプラグイン —このプラグインを使用すると、ジョブの環境をセットアップするために、環境変数を追加し、セットアップスクリプトを実行できます。


4

Jenkins設定で環境変数として追加することはできませんか?

Jenkinsの管理->グローバルプロパティ>環境変数:[追加]をクリックして、プロパティPATHとその値を必要なものに追加します。


1
バージョン1.620では、「Jenkinsの管理->システムの構成->環境変数」のようです。
akaihola

4

これは私がこの厄介な問題を解決した方法です:

PATH@sagarが彼の2番目のオプションで提案したように変数を変更しましたが、それでも私は別のものを得ましたPATH期待したものと値が。

最終的に私はそれがEnvInject私の代わりになったプラグインであることがわかりましたPATH変数。

だから私はアンインストールすることができます EnvInjectか、単にそれを使用してPATH変数を注入すること

Jenkinsジョブの多くはそのプラグインを使用しているため、アンインストールしたくありません...

だから私はファイルを作成しました: environment_variables.properties、Jenkinsのホームディレクトリの下に。

このファイルには、必要なパス環境値が含まれています。 PATH=$PATH:/usr/local/git/bin/

Jenkins Webインターフェースから:Manage Jenkins -> Configure System。その画面で- Prepare jobs environmentオプションを選択し、Properties File Pathフィールドにファイルへのパスを入力しました。/var/lib/jenkins/environment_variables.properties

このようにして、Jenkinsのすべてのジョブで、このenvironment_variables.propertiesファイルに入力した変数を受け取ります。


1
これが正解です。前述のように、/ etc / profileの更新は、ファイルが読み取り専用であり、権限をいじる必要があるため、OSXでは実行可能なソリューションではありません。このソリューションは最もクリーンで、Jenkinsの既存のプラグインを利用しています。プロパティファイルを作成してJenkinsに設定したら、ジェンキンスを再起動することを忘れないでください
Voke Ransom Anighoro

3

Jenkinsは、PATH+<name>PATHだけでなく、任意の変数に付加する形式もサポートしています。

グローバル環境変数またはノード環境変数:

ジェンキンス変数+表記

これは、パイプラインステップでもサポートされていwithEnvます。

node {
  withEnv(['PATH+JAVA=/path/to/java/bin']) {
    ...
  }
}

注意してください、それは変数の前に付加されます。追加する必要がある場合は、他の回答が示すことを行う必要があります。

こちらのパイプライン手順のドキュメントをご覧ください

構文PATH + WHATEVER = / somethingを使用して、/ somethingを$ PATHの前に追加することもできます。

または、ここの EnvVarsのJavaドキュメント。


2

「/etc/init.d/jenkins force-reload」を実行した後、私はこの問題についてのみ進展がありました。私は何よりも先にそれを試し、再起動するよりもそれを使うことを勧めます。


1
そして実際にどこにPATH要素を追加しましたか?私は想像できるあらゆる場所を試しました。
Stabledog 2014年

2

私のUbuntu 13.04では、これを成功させる前にかなりの数の調整を試みました。

  1. /etc/init/jenkins.confを編集します
  2. 「exec start-stop-server ...」が始まる場所を見つけます
  3. その直前に環境アップデートを挿入します。

エクスポートPATH = $ PATH:/ some / new / path / bin


2

追加

/usr/bin/bash

Jenkins-> Jenkinsの管理->システムの構成->シェル->シェル実行可能ファイル

Jenkinsはshを使用しているため、/ etc / profileでも機能しません。これを追加すると、すべてのenvが得られます。


@ sumang_87でこれが機能したJenkinsのバージョンは何ですか?Jenkins 2.9で私を助けることができませんでした
hamx0r 2017

1

私のために働いた解決策

source ~/.bashrc

説明

私が最初にジェンキンスはと、BASHを実行していた検証echo $SHELLecho $BASH(私は明示的に入れているノート#!/bin/bashジェンキンスでテキストエリアの上に、それはBASHを取得するための要件だ場合、私はわかりません)。sourceINGの/etc/profile他の人が働いていませんでした提案されているよう。

見ると/etc/profile、私のFOUND

if [ "$PS1" ]; then
...

「$ PS1」を調べたところ、nullでした。$PS1無駄になりすましてみた

export PS1=1
bash -c 'echo $PATH'

しかし、これは望ましい結果を生み出しませんでした($PATH私が期待する残りの部分を追加します)。しかし、bashにインタラクティブになるように指示すると

export PS1=1
bash -ci 'echo $PATH'

$PATH私は予想通り変更しました。

/etc/bash.bashrcロードするためにインタラクティブシェルを正しくスプーフィングする方法を理解しようとしていましたが~/.bashrc、必要なのはにダウンしているだけなので、単純sourceに問題を解決しました。


を使用#!/bin/bash -elして、ログインシェルとして起動するようにbashに指示してください。これにより、bashは必要な.rcファイルを調達します
Brandon

1

上からすべてを試しましたが、うまくいきませんでした。

私は2つの解決策を見つけました(両方ともSSH-Slave用)

  1. スレーブ設定に移動します

  2. 新しい環境変数を追加する

  3. $ {PATH}:$ {HOME} /。pub-cache / bin:$ {HOME} /。local / bin

「$ {HOME}」の部分は重要です。これにより、追加のPATHが絶対的になります。相対パスは私にとってはうまくいきませんでした。

オプションII(パイプラインスクリプト)

pipeline {
    agent {
        label 'your-slave'
    }
    environment {
        PATH = "/home/jenkins/.pub-cache/bin:$PATH"
    }
    stages {
        stage('Test') {
            steps {
                ansiColor('xterm') {
                    echo "PATH is: $PATH"
                }
            }
        }
    }
}


0

環境変数を設定してコマンドを実行することも効果的です。もちろん、実行するコマンドごとに実行する必要がありますが、おそらくジョブスクリプトがあるため、ビルドごとに1つのコマンドしかありません。私のジョブスクリプトは、環境を使用して使用するpythonを決定するpythonスクリプトです。そのため、パスに/usr/local/bin/python2.7を追加する必要がありました。

PATH=/usr/local/bin <my-command>

0

私にとってうまくいったのは、スレーブのPATH環境を上書きすることでした。

Set:   PATH 
To:    $PATH:/usr/local/bin

次に、スレーブを切断して再接続します。

システム情報が示していたものにもかかわらず、それは機能しました。


0

Zypper(パッケージマネージャー)を介してSLES 11 SP3にJenkins 1.639をインストールしています。インストール設定されたジェンキンスをサービスとして

 # service jenkins
 Usage: /etc/init.d/jenkins {start|stop|status|try-restart|restart|force-reload|reload|probe}

/etc/init.d/jenkinsソース/etc/sysconfig/jenkins、任意のENV変数は、それがこのような新しい環境に別々のログインシェルで起動されているため、そこには、ジェンキンスプロセスによって継承されません設定します。

startproc -n 0 -s -e -l /var/log/jenkins.rc -p /var/run/jenkins.pid -t 1 /bin/su -l -s /bin/bash -c '/usr/java/default/bin/java -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --javaHome=/usr/java/default --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --httpPort=8080 --ajp13Port=8009 --debug=9 --handlerCountMax=100 --handlerCountMaxIdle=20 &' jenkins

私がjenkinsプロセスの環境変数を設定する方法は.bashrc、そのホームディレクトリを経由する方法です- /var/lib/jenkins/var/lib/jenkins/.bashrc以前は存在しなかったので作成しなければなりませんでした。


0

これが私がubuntu 18.04 LTSとJenkins 2.176.2でしたことです

.bash_aliasesファイルを作成し、そこにパス、プロキシ変数などを追加しました。

.bashrcの初めには、これが定義されていました。

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

したがって、非対話型シェルを起動している場合は、ここでは何もしないことを確認しています。

.bash_aliasesのインクルードがあった.bashrcの下部

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

だから私は.bash_aliasesを最初に.bashrcに読み込んで非インタラクティブチェックの真上に移動しました。

これは最初は機能しませんでしたが、スレーブを切断して再接続したため、変数が再度読み込まれます。スレーブ変数を変更する場合は、ジェンキンス全体を再起動する必要はありません。切断して再接続するだけです。


-1

1-プロファイルファイル ".bash_profile"ファイルに追加します

「/ home / your_user /」フォルダにあります

vi .bash_profile

追加:

export JENKINS_HOME=/apps/data/jenkins  
export PATH=$PATH:$JENKINS_HOME

==>これはe jenkinsワークスペースです

2- jettyを使用する場合:jenkins.xmlファイルに移動します

そして追加:

<Arg>/apps/data/jenkins</Arg>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.