ユーザーjenkins
thatsから$PATH
に設定されたJenkinsを実行しています。JenkinsWebインターフェースにアクセスすると、System Propertiesウィンドウ(http://$Host/systemInfo
)別の$PATH
が表示されます。
JenkinsのWebサイトからネイティブrpmでJenkinsをCentosにインストールしました。 Sudo /etc/init.d/jenkins start
を使用して、インストール時に提供される起動スクリプトを使用しています
誰かがそれがなぜ起こるのか説明してもらえますか?
マイケル、
2つのこと:
Jenkinsがコンピューターに接続すると、sh
シェルではなくbash
シェルに移動します(少なくともこれは私が気づいたことです-私は間違っているかもしれません)。したがって、bashrcファイルの$ PATHに加えた変更は考慮されません。
また、ローカルシェル(個人的にsshするシェル)で$ PATHに加えた変更は、ジェンキンスに表示されません。
Jenkinsが使用するパスを変更するには、2つのオプションがあります(AFAIK):
1)/etc/profile
ファイルを編集し、そこに必要なパスを追加します
2)スレーブの構成ページに移動し、環境変数PATH
を追加します。値は$PATH:/followed-by/paths/you/want/to/add
です
2番目のオプションを使用する場合、システム情報には表示されませんが、ビルドには追加されたパスが表示されます。
私はこの問題に直面し続けましたが、今私は追加するだけです:
source /etc/profile
ビルドプロセスの最初のステップとして。これで、Jenkinsがスムーズに動作するように、以降のすべてのルールが読み込まれます。
/etc/sysconfig/jenkins
ファイルを編集して、環境変数などを変更することもできます。ファイルの最後にsource /etc/profile
を追加しただけです。 /etc/profile
には、すべての適切なPATH
変数が設定されています。これを行うときは、必ずジェンキンスを再起動してください
/etc/init.d/jenkins restart
Pend、phingなどを別のパスにインストールするZendServer CEを実行しているので、これは役に立ちました。また、OracleクライアントとJenkinsを使用して取得したLD_LIBRARY_PATH
エラーは取得しません。
/etc/profile
、~/.profile
、および~/.bash_profile
を試しましたが、どれも機能しませんでした。 jenkinsスレーブアカウントの~/.bashrc
を編集したことがわかりました。
この回答に関する情報は古くなっています。 [Jenkinsの構成]に移動する必要があります。次に、そこをクリックして、環境変数のキーと値のペアを追加します。
例:export MYVAR=test
はMYVAR
がキーで、test
が値です。
私の新しいEC2インスタンスでは、Jenkinsユーザーの.profileのPATHに新しい値を追加してからTomcatを再起動するだけでうまくいきました。
構成が異なる古いインスタンスでは、 Sagarの答え の#2を使用することが唯一の機能でした(つまり、.profile、.bash *は機能しませんでした)。
そのためのプラグインが2つ見つかりました。 1つはファイルから値をロードし、もう1つはジョブ設定画面で値を設定できます。
Envfile Plugin —このプラグインを使用すると、ファイルを介して環境変数を設定できます。ファイルの形式は、標準のJavaプロパティファイル形式である必要があります。
EnvInject Plugin —このプラグインは、環境変数を追加し、ジョブの環境をセットアップするためにセットアップスクリプトを実行することを可能にします。
Jenkinsの設定で環境変数として追加するだけではできませんでした:
Jenkinsの管理->グローバルプロパティ>環境変数:[追加]をクリックして、プロパティPATHとその値を必要なものに追加します。
これは私がこの厄介な問題を解決した方法です:
@sagarが2番目のオプションで示唆したようにPATH
変数を変更しましたが、それでも予想とは異なるPATH
値を取得しました。
最終的に、EnvInject
変数を置き換えたのはPATH
プラグインであることがわかりました。
したがって、EnvInject
をアンインストールするか、それを使用してPATH変数を挿入することができます。
Jenkinsの仕事の多くはそのプラグインを使用しているため、アンインストールしたくありませんでした...
そこで、Jenkinsのホームディレクトリの下にenvironment_variables.properties
というファイルを作成しました。
このファイルには、必要なパス環境値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
ファイルに入れた変数を受け取ります。
「/etc/init.d/jenkins force-reload」の後にのみ、この問題の進捗がありました。何よりも先に試してみて、再起動するよりも使用することをお勧めします。
JenkinsはPATH+<name>
という形式もサポートしており、PATHだけでなく、任意の変数の先頭に追加できます。
グローバル環境変数またはノード環境変数:
これは、パイプラインステップwithEnv
でもサポートされています。
node {
withEnv(['PATH+Java=/path/to/Java/bin']) {
...
}
}
注意してください、それは変数の前に付けます。追加する必要がある場合は、他の回答が示すことを行う必要があります。
パイプライン手順のドキュメント here を参照してください。
また、構文PATH + WHATEVER =/somethingを使用して、$ PATHに/ somethingを追加することもできます。
または、EnvVarsのJavaドキュメント here 。
私のUbuntu 13.04では、これに成功する前にかなりの調整を試みました。
export PATH = $ PATH:/ some/new/path/bin
追加
/usr/bin/bash
で
Jenkins-> Jenkinsの管理->システムの設定->シェル->シェル実行可能ファイル
Jenkinsはshを使用しているため、/ etc/profileでも機能しません。これを追加すると、すべてのenvがあります。
source ~/.bashrc
Jenkinsがecho $Shell
およびecho $BASH
を使用してBASHを実行していることを最初に確認しました(Jenkinsのtextareaに明示的に#!/bin/bash
を配置していることに注意してください、それがBASHを取得するための要件であるかどうかはわかりません)。 source
ing /etc/profile
他の人が示唆したように、機能していませんでした。
/etc/profile
を見て
if [ "$PS1" ]; then
...
「$ PS1」を検査すると、ヌルであることがわかりました。 $PS1
のスプーフィングを試してみました
export PS1=1
bash -c 'echo $PATH'
ただし、これでは目的の結果が得られませんでした($PATH
の残りを追加する予定です)。しかし、bashに対話型を指定すると
export PS1=1
bash -ci 'echo $PATH'
$PATH
は予想どおりに変更されました。
インタラクティブシェルを正しくスプーフィングして/etc/bash.bashrc
をロードする方法を見つけようとしていましたが、必要なのは~/.bashrc
でダウンしていたので、単純にsource
ingすることで問題が解決しました。
上記のすべてを試しましたが、うまくいきませんでした。
私は2つの解決策を見つけました(両方ともSSHスレーブ用)
スレーブ設定に移動します
新しい環境変数を追加する
「$ {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"
}
}
}
}
}
Zypper(パッケージマネージャー)を介してSLES 11 SP3にJenkins 1.639をインストールしています。インストールされたJenkinsをサービスとして設定
# 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変数は、次のような新しい環境を備えた個別のログインシェルで起動されるため、jenkinsプロセスに継承されません。
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プロセスのenv変数を設定する方法は、ホームディレクトリの.bashrc
-/var/lib/jenkins
を使用する方法です。以前は存在しなかったため、/var/lib/jenkins/.bashrc
を作成する必要がありました。
環境変数を設定してコマンドを実行することも効果的です。もちろん、実行するコマンドごとに実行する必要がありますが、おそらくジョブスクリプトがあるため、ビルドごとにコマンドは1つしかありません。私のジョブスクリプトは、使用するpythonを決定するために環境を使用するpythonスクリプトであるため、パスに/usr/local/bin/python2.7を配置する必要がありました。
PATH=/usr/local/bin <my-command>
Ubuntuでは、/ etc/default/jenkinsを編集し、最後にソース/ etc/profileを追加するだけで機能します。
私のために働いたのは、スレーブのPATH環境をオーバーライドすることでした。
Set: PATH
To: $PATH:/usr/local/bin
次に、スレーブを切断して再接続します。
システム情報が示していたものにもかかわらず、それは機能しました。