Jenkins-작업간에 변수 전달?


88

젠킨스에 두 개의 직업이 있는데 둘 다 동일한 매개 변수가 필요합니다.

두 번째 작업을 트리거 할 때 동일한 매개 변수가 사용되도록 매개 변수로 첫 번째 작업을 실행하려면 어떻게해야합니까?


하나는 가장 좋은 방법은 사용하는 현재의 작업 매개 변수를, 또는 사용하는 트리거 다운 스트림 작업에서 매개 변수 미리 정의 : 우리는 이렇게 많은 방법을 사용할 수 있습니다
KSR

1
이 제목은 너무 혼란 스럽습니다. 이것은 어떻게 "작업간에 변수를 전달합니까?"입니다. 또한 허용되는 대답은 플러그인입니다. 멋지다!
Rakib

답변:


73

한 작업에서 다른 작업으로 매개 변수를 전달할 수있는 매개 변수화 된 트리거 플러그인 을 사용할 수 있습니다 .

업스트림에서 전달한이 매개 변수도 다운 스트림에 추가해야합니다.


10
안녕하세요, 멍청한 소리로 들려서 죄송합니다. 누군가가 Parameterized Trigger Plugin을 사용하여 수행하는 방법에 대한 세부 정보로 이것을 편집 할 수 있어도 괜찮습니까?
Fadi

10
참고 : bash 스크립트 섹션에서 생성 된 내 보낸 환경 변수가 출력 매개 변수에서 대체 될 수있는 것처럼 보이지 않습니다 (예를 들어 'export VERSION'은 'UPSTREAM_VERSION = $ VERSION'이 올바른 값을 갖도록 만들지 않습니다. 대신 '$ VERSION').
Mark McKenna

21
이 답변은 불충분합니다
tarabyte

6
매개 변수를 대상 작업에 전달하는 방법에 대한 일종의 예가 있어야한다는 데 동의합니다. 현재 Parameterized Trigger Plugin 페이지는 이에 대한 좋은 정보를 제공하지 않습니다. 예를 들어 매개 변수를 전달할 때 사용해야하는 구문의 종류가있을 수 있습니다.
skrii

2
플러그인이 더 이상 작동하지 않는 것 같습니다. 미해결 문제긴 목록을 참조하세요 . 이 플러그인으로 더 이상 매개 변수 값을 전달할 수 없습니다. 다른 해결책이 있습니까?
Markus L

38

1. 빌드 후 작업> "다른 프로젝트에서 매개 변수화 된 빌드 트리거"를 선택합니다.

2. 값이있는 환경 변수를 입력합니다. 값은 Jenkins 빌드 매개 변수 일 수도 있습니다 .Value can also be Jenkins Build Parameters.

자세한 단계는 여기에서 볼 수 있습니다.

https://itisatechiesworld.wordpress.com/jenkins-related-articles/jenkins-configuration/jenkins-passing-a-parameter-from-one-job-to-another/

도움이 되었기를 바랍니다. :)


이 답변은 플러그인이 필요하지 않거나 DSL을 사용하지 않고도 OP가 제기하는 질문을 충족시킵니다.
BTC

8
참고로이 답변에는 여전히 플러그인이 필요합니다.
토마스 리

플러그인은 훌륭하지만 실행 쉘 명령 섹션에 설정된 변수 값을 전달할 수 없을 때 유용합니다.
Tara Prasad Gurung 2018

25

허용 대답은 여기 내 사용 사례 작동하지 않습니다. 한 작업에서 동적으로 매개 변수를 생성하고 다른 작업에 전달할 수 있어야했습니다. Mark McKenna가 언급 했듯이 셸 빌드 단계에서 빌드 후 작업으로 변수를 내보낼 수있는 방법이없는 것 같습니다.

Parameterized Trigger Plugin 을 사용하여 값을 파일에 쓰고 해당 파일을 매개 변수로 사용하여 'Add post-build action'-> 'Trigger parameterized build ...'를 통해 가져온 다음 'Add Parameters'를 선택 하여 해결 방법을 얻었 습니다. > '속성 파일의 매개 변수'.


이것이 내가 필요한 것입니다. 감사.
luckytaxi

jenkins 2.x 파이프 라인을 사용하려는 경우 writeFile / stash-> unstash / readFile을 사용하여 작업간에 상태 데이터를 복사 할 수 있습니다. slideshare.net/ericlongtx/… 예제는 슬라이드 21을 확인하십시오.
siesta

SHELL 변수를 전달하려는 경우 필요합니다. 이 답변에 대해 대단히 감사합니다.
Carl Wainwright

18

위의 답변에는 몇 가지 업데이트가 필요하다고 생각합니다.

업스트림 빌드 아티팩트를 저장할 동적 디렉터리를 만들려고했기 때문에 업스트림 작업 빌드 번호를 다운 스트림 작업에 전달하고 싶었습니다. 위의 단계를 시도했지만 작동하지 못했습니다. 작동 방식은 다음과 같습니다.

  1. 아티팩트 복사 플러그인을 사용하여 현재 작업에서 아티팩트를 복사했습니다.
  2. 업스트림 작업의 빌드 후 작업에서 "SOURCE_BUILD_NUMBER = $ {BUILD_NUMBER}"와 같은 변수를 추가하고 다운 스트림 작업을 트리거하도록 구성했습니다.
  3. 내 다운 스트림 작업이 $ SOURCE_BUILD_NUMBER를 가져와 디렉터리를 만들 수 없다는 점을 제외하고는 모든 것이 작동했습니다.
  4. 그래서이 변수를 사용하려면 아래 그림과 같이 다운 스트림 작업에서 동일한 변수를 매개 변수 변수로 정의해야한다는 것을 알았습니다.

여기에 이미지 설명 입력

새로운 버전의 jenkins에서는 다운 스트림 작업에서도 변수를 정의해야하기 때문입니다. 도움이 되었기를 바랍니다.


전적으로 동의합니다. 이것은 100 % 초기 답변을 완료하는 필수 업데이트입니다.
CodeSlave

또한 두 가지 더 많은 upvoted 옵션을 시도했지만 위의 4 단계에서 설명한 추가 구성을 추가 할 때까지 둘 다 작동하지 않았습니다. 작동하기 위해 복사 아티팩트를 활성화 할 필요가 없었습니다.
Jeff Fol

10

(동료 Google 직원 용)

Build Flow Plugin 으로 심각한 파이프 라인을 구축하는 경우 다음 과 같이 DSL을 사용하여 작업간에 매개 변수를 전달할 수 있습니다.

다른 작업에 전달하기 위해 사용 가능한 문자열 매개 변수 "CVS_TAG"를 가정합니다.

build("pipeline_begin", CVS_TAG: params['CVS_TAG'])
parallel (
   // will be scheduled in parallel.
   { build("pipeline_static_analysis", CVS_TAG: params['CVS_TAG']) },
   { build("pipeline_nonreg", CVS_TAG: params['CVS_TAG']) }
)
// will be triggered after previous jobs complete
build("pipeline_end", CVS_TAG: params['CVS_TAG'])

사용 가능한 변수 / 매개 변수를 표시하기위한 힌트 :

// output values
out.println '------------------------------------'
out.println 'Triggered Parameters Map:'
out.println params
out.println '------------------------------------'
out.println 'Build Object Properties:'
build.properties.each { out.println "$it.key -> $it.value" }
out.println '------------------------------------'

Build Flow Plugin은 더 이상 사용되지 않습니다. 사용자는 wiki.jenkins-ci.org/display/JENKINS/Pipeline+Plugin
vhamon으로

7

아직 댓글을 달 수 없으므로 Nigel Kirby 외에도 내 답변을 추가하십시오.

동적으로 생성 된 매개 변수를 전달하려면 'Execute Shell'타일에서 변수를 내 보낸 다음 'Trigger parameterized build on other projects'=> 'Predefined parameters "=> give'YOUR_VAR = $ YOUR_VAR '을 통해 전달할 수도 있습니다. 우리 팀은이 기능을 사용하여 빌드 작업에서 배포 작업으로 npm 패키지 버전을 전달합니다.

업데이트 : 위는 Jenkins 주입 매개 변수에서만 작동하며, 쉘에서 생성 된 매개 변수는 여전히 동일한 방법을 사용해야합니다. 예. echo YOUR_VAR = $ {YOUR_VAR}> variable.properties 및 해당 파일을 다운 스트림으로 전달


3

다운 스트림 Rundeck 작업에 pom 버전을 전달해야 할 때 동일한 문제에 직면했습니다.

내가 한 일은 다음과 같은 속성 파일을 통해 매개 변수 주입을 사용하는 것입니다.

1) 쉘을 통해 속성 파일에 속성 생성 :

빌드 작업 :

  • 셸 스크립트 실행
  • 환경 변수 삽입

예 : 속성 정의

2) 정의 된 속성을 다운 스트림 작업에 전달 : 빌드 후 작업 :

  • 다른 프로젝트에서 매개 변수화 된 빌드 트리거
  • 매개 변수 추가 : 현재 빌드 매개 변수
  • 매개 변수 추가 : 사전 정의 된 매개 변수

예 : 속성 보내기

3) 그런 다음 다운 스트림 Rundeck 작업에서 $ POM_VERSION을 사용할 수있었습니다.

/! \ Jenkins 버전 : 1.636

/! \ 트리거 된 빌드를 만들 때 어떤 이유로 속성을 전달하기 위해 '현재 빌드 매개 변수'옵션을 추가해야했습니다.


편집 : 내가 쓴 것에서 blooper를 발견했습니다. 속성 정의에서 다음과 같아야합니다. echo POM_VERSION = $ POM_VERSION> play.properties and not : echo $ POM_VERSION >> play.properties 죄송합니다.
Eli Mous

2

답변을 읽으면서 내가 좋아하는 다른 옵션도 제공하지 않습니다. 나는 작업의 매개 변수화를 좋아하지만 항상 잘 확장되는 것은 아닙니다. 첫 번째 작업의 직접 다운 스트림이 아니라 파이프 라인 아래쪽에있는 작업이있는 경우 매개 변수를 끝까지 전달할 수 있도록 파이프 라인의 모든 작업을 매개 변수화하고 싶지는 않습니다. 또는 다양한 다른 작업 (특히 하나의 상위 또는 마스터 작업에 반드시 연결되지 않은 작업)에 사용되는 매개 변수가 많은 경우 다시 매개 변수화가 작동하지 않습니다.

이 경우 값을 속성 파일에 출력 한 다음 EnvInject 플러그인을 사용하여 필요한 작업에 주입하는 것을 선호 합니다. 이것은 동적으로 수행 될 수 있으며, 이는 매개 변수화 된 작업이 여전히 사용 된 위의 다른 답변에서 문제를 해결하는 또 다른 방법입니다. 이 솔루션은 많은 시나리오에서 매우 잘 확장됩니다.


1

Hudson Groovy 빌더 를 사용 하여이를 수행 할 수 있습니다 .

파이프 라인의 첫 번째 작업

여기에 이미지 설명 입력

파이프 라인의 두 번째 작업

여기에 이미지 설명 입력


1
두 개의 이미지와 외부 링크를 기반으로하는 대답은 매우 도움이 답변을하지 않습니다
윌 Barnwell

0

나는 그것을 알아!

거의 2 시간 동안 시행 착오를 겪으면서 나는 그것을 알아 냈다.

이것은 작동하며 원격 작업에 변수를 전달하기 위해 수행하는 작업입니다.

    def handle = triggerRemoteJob(remoteJenkinsName: 'remoteJenkins', job: 'RemoteJob' paramters: "param1=${env.PARAM1}\nparam2=${env.param2}")

공백없이 두 개의 매개 변수를 구분하려면 \ n을 사용하십시오.

매개 변수와 반대 : '' 'someparams' ''

우리는 매개 변수를 사용합니다 : "someparams"

"..."는 원하는 변수의 값을 얻는 것입니다. (이것은 두 개의 작은 따옴표가 아니라 큰 따옴표입니다)

'' '...' ''또는 '...'는 해당 값을 얻지 못합니다. (작은 따옴표 3 개 또는 작은 따옴표 만)

여기에있는 모든 매개 변수는 파이프 라인 시작시 environment {} 블록에 정의되며 필요한 경우 stage> steps> scripts에서 수정됩니다.

또한 "..."를 사용할 때 '' '... "..."' ''또는 "... '..'..."또는 그 조합을 사용할 수 없음을 테스트 한 결과 그것...

여기서 중요한 점은 매개 변수 섹션에서 "..."를 사용할 때 문자열 매개 변수를 전달할 수 없다는 것입니다. 예를 들어 이것은 작동하지 않습니다.

    def handle = triggerRemoteJob(remoteJenkinsName: 'remoteJenkins', job: 'RemoteJob' paramters: "param1=${env.PARAM1}\nparam2='param2'")

위와 같은 것을 전달하려면 환경 변수 param2 = 'param2'를 설정 한 다음 원격 트리거 플러그인 단계의 매개 변수 섹션에서 $ {env.param2}을 사용해야합니다.

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