젠킨스에 두 개의 직업이 있는데 둘 다 동일한 매개 변수가 필요합니다.
두 번째 작업을 트리거 할 때 동일한 매개 변수가 사용되도록 매개 변수로 첫 번째 작업을 실행하려면 어떻게해야합니까?
젠킨스에 두 개의 직업이 있는데 둘 다 동일한 매개 변수가 필요합니다.
두 번째 작업을 트리거 할 때 동일한 매개 변수가 사용되도록 매개 변수로 첫 번째 작업을 실행하려면 어떻게해야합니까?
답변:
한 작업에서 다른 작업으로 매개 변수를 전달할 수있는 매개 변수화 된 트리거 플러그인 을 사용할 수 있습니다 .
업스트림에서 전달한이 매개 변수도 다운 스트림에 추가해야합니다.
1. 빌드 후 작업> "다른 프로젝트에서 매개 변수화 된 빌드 트리거"를 선택합니다.
2. 값이있는 환경 변수를 입력합니다. 값은 Jenkins 빌드 매개 변수 일 수도 있습니다 .Value can also be Jenkins Build Parameters.
자세한 단계는 여기에서 볼 수 있습니다.
도움이 되었기를 바랍니다. :)
허용 대답은 여기 내 사용 사례 작동하지 않습니다. 한 작업에서 동적으로 매개 변수를 생성하고 다른 작업에 전달할 수 있어야했습니다. Mark McKenna가 언급 했듯이 셸 빌드 단계에서 빌드 후 작업으로 변수를 내보낼 수있는 방법이없는 것 같습니다.
Parameterized Trigger Plugin 을 사용하여 값을 파일에 쓰고 해당 파일을 매개 변수로 사용하여 'Add post-build action'-> 'Trigger parameterized build ...'를 통해 가져온 다음 'Add Parameters'를 선택 하여 해결 방법을 얻었 습니다. > '속성 파일의 매개 변수'.
위의 답변에는 몇 가지 업데이트가 필요하다고 생각합니다.
업스트림 빌드 아티팩트를 저장할 동적 디렉터리를 만들려고했기 때문에 업스트림 작업 빌드 번호를 다운 스트림 작업에 전달하고 싶었습니다. 위의 단계를 시도했지만 작동하지 못했습니다. 작동 방식은 다음과 같습니다.
새로운 버전의 jenkins에서는 다운 스트림 작업에서도 변수를 정의해야하기 때문입니다. 도움이 되었기를 바랍니다.
(동료 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 '------------------------------------'
아직 댓글을 달 수 없으므로 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 및 해당 파일을 다운 스트림으로 전달
다운 스트림 Rundeck 작업에 pom 버전을 전달해야 할 때 동일한 문제에 직면했습니다.
내가 한 일은 다음과 같은 속성 파일을 통해 매개 변수 주입을 사용하는 것입니다.
1) 쉘을 통해 속성 파일에 속성 생성 :
빌드 작업 :
예 : 속성 정의
2) 정의 된 속성을 다운 스트림 작업에 전달 : 빌드 후 작업 :
예 : 속성 보내기
3) 그런 다음 다운 스트림 Rundeck 작업에서 $ POM_VERSION을 사용할 수있었습니다.
/! \ Jenkins 버전 : 1.636
/! \ 트리거 된 빌드를 만들 때 어떤 이유로 속성을 전달하기 위해 '현재 빌드 매개 변수'옵션을 추가해야했습니다.
답변을 읽으면서 내가 좋아하는 다른 옵션도 제공하지 않습니다. 나는 작업의 매개 변수화를 좋아하지만 항상 잘 확장되는 것은 아닙니다. 첫 번째 작업의 직접 다운 스트림이 아니라 파이프 라인 아래쪽에있는 작업이있는 경우 매개 변수를 끝까지 전달할 수 있도록 파이프 라인의 모든 작업을 매개 변수화하고 싶지는 않습니다. 또는 다양한 다른 작업 (특히 하나의 상위 또는 마스터 작업에 반드시 연결되지 않은 작업)에 사용되는 매개 변수가 많은 경우 다시 매개 변수화가 작동하지 않습니다.
이 경우 값을 속성 파일에 출력 한 다음 EnvInject 플러그인을 사용하여 필요한 작업에 주입하는 것을 선호 합니다. 이것은 동적으로 수행 될 수 있으며, 이는 매개 변수화 된 작업이 여전히 사용 된 위의 다른 답변에서 문제를 해결하는 또 다른 방법입니다. 이 솔루션은 많은 시나리오에서 매우 잘 확장됩니다.
나는 그것을 알아!
거의 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}을 사용해야합니다.