Jenkins / Hudson 환경 변수


101

나는 사용자로부터 젠킨스를 실행하고 jenkins그게 전부가있다 $PATH나는에, 젠킨스 웹 인터페이스에 갈 때 뭔가 설정하고 시스템 등록 정보 (윈도우 http://$host/systemInfo나 다른 참조) $PATH.

Jenkins 웹 사이트의 기본 rpm으로 Centos에 Jenkins를 설치했습니다. 다음을 사용하여 설치와 함께 제공된 시작 스크립트를 사용하고 있습니다.sudo /etc/init.d/jenkins start

왜 그런 일이 발생했는지 설명해 주시겠습니까?


1
젠킨스로 로그인하고 echo $PATH, 젠킨스에서 보는 것과 일치합니까?
Upgradingdave

3
@Dave no, 일치하지 않습니다. 이유를 이해할 수 없습니다
Michael

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

남자 이름,

두가지:

Jenkins가 컴퓨터에 연결되면 sh셸이 아닌 bash셸로 이동합니다 (적어도 이것이 내가 알아 차린 것입니다-내가 틀렸을 수 있습니다). 따라서 bashrc 파일에서 $ PATH에 대한 변경 사항은 고려되지 않습니다.

또한 로컬 셸 (개인적으로 ssh를 사용하는 것)에서 $ PATH에 대한 변경 사항은 Jenkins에 표시되지 않습니다.

Jenkins가 사용하는 경로를 변경하려면 두 가지 옵션 (AFAIK)이 있습니다.

1) /etc/profile파일을 편집 하고 원하는 경로를 추가하십시오.

2) 슬레이브의 구성 페이지로 이동하여 PATH값과 함께 환경 변수를 추가하십시오 .$PATH:/followed-by/paths/you/want/to/add

두 번째 옵션을 사용하면 시스템 정보에 여전히 표시되지 않지만 빌드에는 추가 된 경로가 표시됩니다.


2
이 대답은 나를 위해 일했지만 Jenkins는 구성 페이지에 쓰는 내용에 대해 매우 민감하다는 것을 알았습니다. 공백이있는 경로에서는 작동하지 못했습니다.
miguelSantirso

예,하지만 UNIX 쉘에서 공백이있는 경로를 입력 할 때 공백은 일반적으로 ''문자로 이스케이프됩니다. 따라서 경로가 "/ opt / bin / My Folder Name"인 경우 대신 "/ opt / bin / My \ Folder \ Name"을 시도 할 수 있습니다. 이렇게하면 공백을 벗어나 사용할 수 있습니다.
Sagar

11
해결책 2는 갈 길입니다.
gagarine

2
후속 조치 : 우분투 시스템에서 jenkins 서비스는 신생 작업이므로 이전 sysvinit 스텁 스크립트를 수정했습니다. 잘못된 장소. /etc/init/jenkins.conf 스크립트를 조정하고 exec의 java 전에 PATH를 업데이트하면 작동하는 것 같습니다.
Stabledog 2014 년

15
작은 어두운 구석이 있습니다. jenkins 마스터는 사용자 지정을 패치하기 위해 슬레이브에서 환경 변수를 캐시합니다. 따라서 슬레이브 (시스템 또는 사용자)에서 환경 변수를 변경하는 경우 마스터를 다시 시작하여 슬레이브 구성을 업데이트해야합니다.
Thinkeye

36

이 문제가 계속 발생했지만 이제 다음을 추가합니다.

source /etc/profile

내 빌드 프로세스의 첫 번째 단계로. 이제 Jenkins가 원활하게 작동하도록 모든 후속 규칙이로드됩니다.


6
어? 자세히 말씀해주세요 ... 어디에 추가 하시겠습니까? 어떻게? 언제? Windows에서 작동합니까?
HX_unbanned

빌드의 일부로 셸 명령을 실행하고 있다고 가정합니다. 넣어 source /etc/profile쉘> 명령 텍스트 영역을 실행> 그 빌드의 첫 번째 명령한다.
bryan kennedy

2
그것은 또한 내가 좋아하는 경로를 발견, Mac에서 작동 /usr/local/bin의 지정이 /etc/paths, 그리고 /etc/paths에 의해 사용되는 /usr/libexec/path_helper, 그리고 path_helper이 실행됩니다 /etc/profile.
hiroshi

1
당신이 내 하루 :) 저장
RameshVel

Sourcing / etc / profile은 작업에 'echo $ PATH'디버그를 추가 할 때 경로를 표시하지만 작업에 대한 환경 변수를 보면 동일하지 않습니다.
Elijah Lynn

23

/etc/sysconfig/jenkins파일을 편집하여 환경 변수 등을 변경할 source /etc/profile수도 있습니다. 파일 끝에 간단히 추가 했습니다. /etc/profile모든 적절한 PATH변수 설정이 있습니다. 이 작업을 수행 할 때 Jenkins를 다시 시작해야합니다.

/etc/init.d/jenkins restart

우리는 pear, phing 등을 다른 경로에 설치하는 ZendServer CE를 실행하고 있으므로 이것이 도움이되었습니다. 또한 LD_LIBRARY_PATHOracle 클라이언트 및 Jenkins 에서 발생 하는 오류를 얻지 못합니다 .


이것은 핵심 주석이거나 {jenkins-url} / restart 또는 {jenkins-url} / safeRestart에서 jenkins를 다시 시작합니다. 나는 우분투 호스트도의 / etc / 환경을 편집하여 경로 변경이 포착되지 않은 이유에 내 머리를 두드리는 한 - {젠킨스-URL} / SYSTEMINFO에 의해 확인으로 RESTART는, 그것을 수정합니다
kert

다른 모든 사람들은 실패했습니다. 이것이 효과가 있었던 유일한 것입니다! 나는 그것이 더 널리 퍼져서 지난 몇 시간을 낭비하지 않았 으면 좋겠다!
Brad Bonkoski 2015

15

나는 노력 /etc/profile, ~/.profile그리고 ~/.bash_profile그 중 어느 것도 작동하지 않습니다. ~/.bashrc젠킨스 슬레이브 계정에 대한 편집 이 수행되었음을 알았습니다.


3
비 로그인 쉘은 어느 쪽도 읽을하지 않기 때문 /etc/profile~/.profile
빈센조

9

이 답변에 대한 정보가 오래되었습니다. Jenkins 구성> 그런 다음 클릭하여 거기에서 환경 변수 키-값 쌍을 추가해야합니다.

예 : export MYVAR=testMYVAR키이고 test값입니다.


5

새로운 EC2 인스턴스에서 Jenkins 사용자의 .profile의 PATH에 새 값을 추가 한 다음 tomcat을 다시 시작하는 것만으로도 효과가있었습니다.

구성이 다른 이전 인스턴스에서는 Sagar의 답변 에서 # 2를 사용 하는 것이 유일하게 작동했습니다 (예 : .profile, .bash *가 작동하지 않음).


4

두 가지 플러그인을 찾았습니다. 하나는 파일에서 값을로드하고 다른 하나는 작업 구성 화면에서 값을 구성 할 수 있도록합니다.

Envfile 플러그인 —이 플러그인을 사용하면 파일을 통해 환경 변수를 설정할 수 있습니다. 파일 형식은 표준 Java 속성 파일 형식이어야합니다.

EnvInject 플러그인 —이 플러그인을 사용하면 작업 환경을 설정하기 위해 환경 변수를 추가하고 설정 스크립트를 실행할 수 있습니다.


4

Jenkins 설정에서 환경 변수로 추가 할 수 없습니다.

Jenkins 관리-> 전역 속성> 환경 변수 : 그런 다음 "추가"를 클릭하여 필요한 항목에 속성 PATH 및 해당 값을 추가합니다.


1
버전 1.620에서는 "Jenkins 관리-> 시스템 구성-> 환경 변수"로 보입니다.
akaihola

4

이것이 내가이 성가신 문제를 해결 한 방법입니다.

PATH@sagar가 두 번째 옵션에서 제안한대로 변수를 변경 했지만 여전히 PATH예상 과 다른 값을 얻었습니다 .

결국 EnvInjectPATH변수 를 대체 한 플러그인이라는 사실을 알게되었습니다 !

따라서 제거 EnvInject하거나 PATH 변수를 삽입하는 데 사용할 수 있습니다 .

많은 Jenkins 작업이 해당 플러그인을 사용하므로 제거하고 싶지 않았습니다.

그래서 environment_variables.propertiesJenkins 홈 디렉토리 아래에 파일을 만들었습니다 .

이 파일에는 필요한 경로 환경 값이 포함되어 PATH=$PATH:/usr/local/git/bin/있습니다..

Jenkins 웹 인터페이스에서 : 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의 기존 플러그인을 활용합니다. 젠킨스에 당신이 당신의 특성 파일을 작성하면 젠킨스를 다시 시작하고 설정하는 것을 잊지 마십시오
Voke 몸값 Anighoro

3

Jenkins는 PATH+<name>PATH뿐만 아니라 모든 변수 앞에 추가 하는 형식도 지원합니다 .

전역 환경 변수 또는 노드 환경 변수 :

Jenkins 변수 + 표기법

파이프 라인 단계에서도 지원됩니다 withEnv.

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

변수 앞에 추가됩니다. 추가해야하는 경우 다른 답변에 표시된대로 수행해야합니다.

여기 에서 파이프 라인 단계 문서를 참조 하십시오 .

$ PATH 앞에 / something을 추가하기 위해 PATH + WHATEVER = / something 구문을 사용할 수도 있습니다.

또는 여기 EnvVars에 대한 자바 문서 .


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 관리-> 시스템 구성-> Shell-> Shell 실행 파일

Jenkins는 sh를 사용하여 / etc / profile조차도 나를 위해 작동하지 않습니다. 이것을 추가하면 모든 환경이 있습니다.


@ sumang_87에서 어떤 버전의 Jenkins가 작동 했습니까? Jenkins 2.9에서 나를 도와주지 못했습니다
hamx0r

1

나를 위해 일한 솔루션

source ~/.bashrc

설명

나는 먼저 Jenkins가 BASH를 실행 echo $SHELL하고 있는지 확인했습니다. (Jenkins의 텍스트 영역 위에 echo $BASH명시 적으로 배치 #!/bin/bash하고 있습니다. BASH를 얻기위한 요구 사항인지 확실하지 않습니다). source보내고 /etc/profile작동하지 않는 제안 다른 사람으로.

/etc/profile내가 찾은 것을 보면서

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

나는 위에서 모든 것을 시도했다-나를 위해 일하지 않았다.

두 가지 해결책을 찾았습니다 (SSH-Slave 모두)

  1. 슬레이브 설정으로 이동

  2. 새 환경 변수 추가

  3. 통로
  4. $ {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

우분투에서는 / etc / default / jenkins를 편집하고 끝에 소스 / etc / profile을 추가하면 나에게 작동합니다.


0

환경 변수 세트로 명령을 실행하는 것도 효과적입니다. 물론 실행하는 각 명령에 대해 수행해야하지만 작업 스크립트가있을 수 있으므로 빌드 당 하나의 명령 만있을 수 있습니다. 내 작업 스크립트는 환경을 사용하여 사용할 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를 설치했습니다. Jenkins를 서비스로 구성한 설치

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

/etc/init.d/jenkinssources 이지만 /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 vars를 설정하는 방법은 .bashrc홈 디렉토리- /var/lib/jenkins. /var/lib/jenkins/.bashrc이전에 존재하지 않았던 것처럼 만들어야 했습니다.


0

Jenkins 2.176.2를 사용하여 우분투 18.04 LTS에서 수행 한 작업은 다음과 같습니다.

.bash_aliases 파일을 만들고 거기에 경로, 프록시 변수 등을 추가했습니다.

.bashrc의 시작 부분에 이것이 정의되었습니다.

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

그래서 우리가 비대화 형 쉘을 시작한다면 여기서 아무것도하지 않는지 확인하는 것입니다.

.bashrc의 하단에는 .bash_aliases에 대한 포함이있었습니다.

# 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 젠킨스 작업 공간입니다.

2- jetty를 사용하는 경우 : jenkins.xml 파일로 이동하십시오.

다음을 추가하십시오.

<Arg>/apps/data/jenkins</Arg>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.