Jenkins에서 환경 변수를 설정하는 방법은 무엇입니까?


228

나는 다음과 같은 것을 할 수 있기를 원한다.

AOEU=$(echo aoeu)

Jenkins를 설정했습니다 AOEU=aoeu.

Jenkins 의 환경 변수 섹션은 그렇게하지 않습니다. 대신에을 설정합니다 AOEU='$(echo aoeu)'.

Jenkins가 쉘 명령을 평가하고 출력을 환경 변수에 할당하도록하려면 어떻게해야합니까?

결국 작업 실행자를 다른 스크립트로 전달하거나 다른 스크립트에서 사용할 수있는 환경 변수에 할당 할 수 있기를 원합니다.


2
EnvInject 플러그인에 심각한 보안 취약점이 있습니다. 이제 젠킨스는이를위한 붙박이 지원을 데 stackoverflow.com/a/53430757/1753177
lambodar

@lambodar 링크는 그냥 질문에 간다
Z. Cochrane

@ Z.Cochrane, 저자가 삭제 한 답변에 대한 링크입니다.
Noel Yap

답변:


217

다음과 같은 방법으로 EnvInject 플러그인 을 통해 수행 할 수 있습니다 .

  1. 다음을 실행하는 "쉘 실행"빌드 단계를 작성하십시오.

    echo AOEU=$(echo aoeu) > propsfile
    
  2. 환경 변수 주입 빌드 단계를 작성하고 "속성 파일 경로"를로 설정하십시오 propsfile.

참고 :이 플러그인은 대부분 파이프 라인 플러그인과 호환되지 않습니다.


4
EnvInject는 위에서 설명한 상황을 처리하지 않습니다. [EnvInject]-환경 변수로 주입하여 속성 내용 AOEU = $ (echo aoeu) [EnvInject]-성공적으로 주입 된 변수. [EnvInject]-해결되지 않은 'AOEU'변수를 설정 해제합니다.
Noel Yap

1
이 솔루션은 Unix 쉘 구문을 사용하며 Windows에서는 작동하지 않습니다.
fbmd

2
@fbmd Windows에서 실행 중입니다. 당신은 당신이 sh경로에 있는지 확인해야합니다 .
Custodio

2
빌드가 주입 부분으로 진행되지 않기 때문에 "execute shell"이 오류와 함께 종료되면 EnvInject가 작동하지 않습니다.
Chadi

1
@ Vitim.us foo는 특정 쉘 액션으로 내보내 지지만 다른 액션으로는 내 보내지 않습니다.
Noel Yap

109

가장 간단한 방법

빌드 시작시 EnvInject 플러그인 을 사용 하여 환경 변수를 주입 할 수 있습니다 . 예를 들면 다음과 같습니다.

'빌드 환경'-> '빌드 프로세스에 환경 변수 삽입'-> '속성 컨텐츠'아래에 key = value (bash OK!)를 추가하십시오.

작동하는지 어떻게 알 수 있습니까?

EnvInject-성공적으로 주입 된 변수


5
쉘 명령의 출력에 따라 값을 설정하십시오.
Noel Yap

1
@NoelYap 결국 라인이 평가되는 한 작동 key=value합니다. 내 유스 케이스에서 나는 라인을 완전히 생성한다. cat app/build.gradle | grep "def majorVersion" | python -c 'import sys,re,os; print("VERSION_NUMBER="+re.findall(r"[\d+\.]+", sys.stdin.read())[0]+os.environ["BUILD_NUMBER"])'
kenny_k

@theFunkyEngineer 어떤 버전의 EnvInject를 사용하고 있습니까? 1.91.3에서는 여러분과 같은 명령이 "cat = app ..."로 해석됩니다. 이 기능이 지원되면 좋을지 모르지만 우연히이 기능이 작동했을 수도 있습니다.
killthrush

1
쉘 명령의 출력에 값을 할당하려고 시도하는 중 나를 위해 작동하지 않습니다 : BUILD_DATE=date "+%Y-%m-%d-%H_%M_%S"BUILD_DATE=$(date "+%Y-%m-%d-%H_%M_%S")BUILD_DATE=`date "+%Y-%m-%d-%H_%M_%S"`나를 위해 작동하지 않았다
scottysseus

1
@ scottyseus 나는이 wiki.jenkins-ci.org/display/JENKINS/Environment+Script+Plugin 을 사용하여 매력처럼 작동했습니다. stackoverflow.com/a/38286383/1240268
Andy Hayden

56

내 경우에는, 내가 추가 할 필요 JMETER_HOME에서 내 로컬 빌드 환경 (Windows 및 Mac)을 방해하지 않을 방식으로, 내 젠킨스 서버 (리눅스)의 모든 프로젝트에서 내 Ant 빌드 스크립트를 통해 할 수 할 수 환경 변수를 build.xml스크립트 . Jenkins 관리-시스템 구성-글로벌 특성 을 통해 환경 변수를 설정하는 것이 가장 쉽고 가장 방해가되지 않는 방법입니다. 플러그인이 필요하지 않습니다.

Jenkins 글로벌 속성 관리


그런 다음 Ant를 통해 환경 변수를 사용할 수 있습니다.

<property environment="env" />
<property name="jmeter.home" value="${env.JMETER_HOME}" />

다음을 추가하여 작동하는지 확인할 수 있습니다.

<echo message="JMeter Home: ${jmeter.home}"/>

어느 생산 :

JMeter 홈 : ~ / .jmeter


그것은 세계적인 재산입니다. Jenkins의 모든 작업에 영향을 미칩니다. 이 속성을 한 작업에 원한다고 가정 해 봅시다.
IgorGanapolsky

Jenkins 관리-시스템 구성-전역 속성에 다음 git /path/to/my/git을 추가했습니다 PATH+git /path/to/my/git. 그러나 gita에서 액세스하려고 Jenkins pipeline script하면 다음과 같은 결과가 나타납니다 /bin/sh: git: command not found.
8

1
JAVA_HOME 환경 변수를 설정해야 했는데이 답변이 도움이되었습니다.
Sandoval0992

19

Environment Injector 플러그인 을 사용 하여 작업 및 노드 레벨에서 Jenkins의 환경 변수를 설정할 수 있습니다 . 아래에서는 작업 수준에서 설정하는 방법을 보여줍니다.

  1. Jenkins 웹 인터페이스 Manage Jenkins > Manage Plugins에서 플러그인으로 이동하여 설치하십시오.

환경 인젝터 플러그인

  1. 작업 Configure화면으로 이동
  2. 섹션 Add build step에서 찾아서 Build선택Inject environment variables
  3. 원하는 환경 변수를 VARIABLE_NAME = VALUE 패턴으로 설정하십시오. 제 경우에는 USERPROFILE 변수의 값을 변경했습니다

여기에 이미지 설명을 입력하십시오

일부 조건 (예 : 작업 매개 변수)에 따라 새 환경 변수를 정의해야하는 경우이 답변을 참조하십시오 .


16

이런 식으로 시도해 볼 수 있습니다

stages {
        stage('Build') {
            environment { 
                    AOEU= sh (returnStdout: true, script: 'echo aoeu').trim()
                }
            steps {
                sh 'env'
                sh 'echo $AOEU'
            }
        }
    }

이것은 파싱하지 않습니다.
rjurney

2
이 형식은 Jenkinsfile 파이프 라인 프로젝트를위한 것입니다. 이 스 니펫을 사용하는 직업 유형은 무엇입니까?
JSixface

1
이것은 Jenkinsfile파이프 라인 (작업이 아닌) 에서 완벽하게 작동합니다 ! 대단해, 고마워!
mathielo

14

EnvInject Plugin 일명 ( 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.

폴더 생성, 파일 복사 등과 같은 환경 설정을 목표로하는 스크립트 파일을 실행합니다. 스크립트 파일 내용을 제공하십시오. 위의 속성 변수를 사용할 수 있습니다. 그러나 스크립트에서 환경 변수를 추가하거나 재정의하더라도 빌드 작업에는 영향을 미치지 않습니다 .


12

빌드 봉투를 전파 플러그인 은 예를 들어, 새로운 빌드 환경 변수를 추가 할 수 있습니다

Jenkins 빌드-빌드 환경 변수 전파

후속 Propagate 빌드 환경 변수 단계는 이전에 정의 된 환경 변수 값을 대체합니다.


감사합니다! Build Env Propagator Plugin은 시도했을 때 작동했으며 빌드 단계에서 환경 변수를 설정하는 것이 좋습니다!
twasbrillig

10

필자의 경우 다음 옵션을 사용하여 환경 변수를 구성했으며 작동했습니다.

Manage Jenkins -> Configure System -> Global Properties -> Environment Variables -> Add

이것이 가장 좋은 방법입니다
Long Nguyen

7

일반적으로 시스템 구성의 전역 속성 에서 환경 변수 를 구성 할 수 있습니다 .

그러나 쉘 대체가있는 동적 변수의 경우 Jenkins HOME 디렉토리에 스크립트 파일을 작성하고 빌드 중에이를 실행할 수 있습니다. SSH 액세스가 필요합니다. 예를 들어.

  1. Jenkins로 로그인 : sudo su - jenkins또는sudo su - jenkins -s /bin/bash
  2. 쉘 스크립트를 작성하십시오. 예 :

    echo 'export VM_NAME="$JOB_NAME"' > ~/load_env.sh
    echo "export AOEU=$(echo aoeu)" >> ~/load_env.sh
    chmod 750 ~/load_env.sh
    
  3. Jenkins Build ( Execute shell )에서 스크립트와 그 변수를 무엇보다 먼저 호출하십시오.

    source ~/load_env.sh
    

불행히도 나를 위해 일하지 않았다. 후에도 sudo su - jenkins여전히 echo $USER나에게 준다 root.
prayagupd

@prayagupd 전체 로그인을 시뮬레이션해야하므로 su -l매개 변수를 사용 하여이를 수행하십시오. 그렇지 않으면 별도의 질문을하십시오.
kenorb

스크립트를 호출 한 후 @kenorb, 어떻게 env 변수를 다시 읽습니까? 예를 들어, 이것은 "" "소스에서 작동하지 않습니다 ~ / load_env.sh echo"VM_NAME : $ VM_NAME "echo"VM_NAME : $ {VM_NAME} "" ""
aung

7

환경 변수를 저장하고 액세스하는 스 니펫입니다.

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)를 사용하여 구문 분석해야합니다.


4

EnvInject 와 매우 유사한 환경 스크립트 플러그인 ( GitHub )을 사용해보십시오 . 환경 변수를 생성하는 빌드 전에 (SCM 체크 아웃 후) 스크립트를 실행할 수 있습니다. 예 :

Jenkins 빌드-정규 작업-빌드 환경

스크립트에서 예 FOO=bar를 들어 표준 출력으로 인쇄 하여 해당 변수를 설정할 수 있습니다.

기존 PATH스타일 변수 에 추가하는 예 :

echo PATH+unique_identifier=/usr/local/bin

따라서 스크립트에서 필요한 모든 작업을 자유롭게 수행 할 수 있습니다 ( cat파일 또는 프로젝트의 소스 트리 등 다른 언어로 스크립트를 실행하는 등).



0

어떤 이유로 사용자sudo su - jenkins 에게 나를 기록하지 않으면 다른 접근법을 사용하게되었습니다.jenkins

나는 젠킨스 사용하여 글로벌 ENV 변수 설정의 성공 config.xml에서을 /var/lib/jenkins/config.xml외부 플러그인을 사용하지 않고도를 - (리눅스 / RHEL에 설치).

나는 jenkins add를 추가 globalNodeProperties하고 add를 멈추고 다시 시작해야했습니다.

예, 나는 변수를 정의하고있어 APPLICATION_ENVIRONMENTSPRING_PROFILES_ACTIVEcontinious_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>

-3

우리는 그루비 작업 파일을 사용합니다 :

description('')
steps {
    environmentVariables {
        envs(PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: true)
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.