web-dev-qa-db-ja.com

Jenkins / Hudson環境変数

ユーザーjenkins thatsから$PATHに設定されたJenkinsを実行しています。JenkinsWebインターフェースにアクセスすると、System Propertiesウィンドウ(http://$Host/systemInfo)別の$PATHが表示されます。

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

誰かがそれがなぜ起こるのか説明してもらえますか?

95
Michael

マイケル、

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

135
Sagar

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

source /etc/profile

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

34
bryan kennedy

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

/etc/init.d/jenkins restart

Pend、phingなどを別のパスにインストールするZendServer CEを実行しているので、これは役に立ちました。また、OracleクライアントとJenkinsを使用して取得したLD_LIBRARY_PATHエラーは取得しません。

19
dbiehl

/etc/profile~/.profile、および~/.bash_profileを試しましたが、どれも機能しませんでした。 jenkinsスレーブアカウントの~/.bashrcを編集したことがわかりました。

14
mmacvicar

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

例:export MYVAR=testMYVARがキーで、testが値です。

9
TJ Biddle

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

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

5
Rob Barreca

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

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

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

4
Vicro

Jenkinsの設定で環境変数として追加するだけではできませんでした:

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

4

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

@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ファイルに入れた変数を受け取ります。

4
ofirbt

「/etc/init.d/jenkins force-reload」の後にのみ、この問題の進捗がありました。何よりも先に試してみて、再起動するよりも使用することをお勧めします。

2
Rene Wooller

JenkinsはPATH+<name>という形式もサポートしており、PATHだけでなく、任意の変数の先頭に追加できます。

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

Jenkins variable + notation

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

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

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

パイプライン手順のドキュメント here を参照してください。

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

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

2
The Badger

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

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

export PATH = $ PATH:/ some/new/path/bin

2
Stabledog

追加

/usr/bin/bash

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

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

1
sumang_87

私のために働いた解決策

source ~/.bashrc

説明

Jenkinsがecho $Shellおよびecho $BASHを使用してBASHを実行していることを最初に確認しました(Jenkinsのtextareaに明示的に#!/bin/bashを配置していることに注意してください、それがBASHを取得するための要件であるかどうかはわかりません)。 sourceing /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でダウンしていたので、単純にsourceingすることで問題が解決しました。

1
quickshiftin

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

私は2つの解決策を見つけました(両方ともSSHスレーブ用)

  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
Mike Mitterer

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を作成する必要がありました。

0
Peter Dotchev

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

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

Ubuntuでは、/ etc/default/jenkinsを編集し、最後にソース/ etc/profileを追加するだけで機能します。

0
Arx Cruz

私のために働いたのは、スレーブのPATH環境をオーバーライドすることでした。

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

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

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

0
Matt