Jenkins의 다른 작업에서 특정 빌드 번호를 승격하는 방법은 무엇입니까?
Promoted Build Plugin
from을 설치 Jenkins
했고 지금은 기존 작업에서 빌드를 홍보하는 데 몇 가지 문제가 있습니다. 시나리오는 다음과 같습니다.
Nightly Build
매일 밤 필요한 모든 테스트와 메트릭을 실행 하는 기존 작업이 있습니다.Deploy Build
매개 변수 $ {BUILD_NUMBER}를 수락하고 해당 $ {BUILD_NUMBER}가있는 빌드를 배포 하는 기존Nightly Build
- [Nightly Build]가 실행되어 아티팩트 # 39를 성공적으로 빌드했다고 가정 해 보겠습니다.
- 이제 매개 변수로 # 39를 전달하는 [Deploy Build]를 실행할 수 있습니다.
- [Nightly Build] # 39의 아티팩트가 배포 될 예정입니다.
여태까지는 그런대로 잘됐다. 이제 내가 추가하고 싶은 부분입니다 Build Promotions
...
승격 할 수있는 방법이 있나요 Nightly Build #39
( 이미 이전에 건축 된 것을 통지 로부터는) Deploy Build
? 또는 다른 곳에서도 솔직히 나는 여기서 길을 잃었습니다 :(
나는 그것들이 a가 없기 때문에 명확한 업스트림 / 다운 스트림 관계로 보이지 않습니다 : 항상이 빌드를 실행하고 실행 중에 다른 하나를 실행합니다. 빌드] .
Parameterized Trigger Plugin 2.23 버전 업데이트 :
버전 2.23 이상으로 동작이 변경되었습니다 ( 알려준 AbhijeetKamble 에게 감사드립니다 ). 호출 ( build ) 작업 의 사전 정의 된 매개 변수 섹션에 의해 전달되는 모든 매개 변수 는 호출 된 ( deploy ) 작업 에 존재해야합니다 . 또한 호출 된 작업의 매개 변수에 대한 제한 사항이 적용되므로 호출 된 작업의 매개 변수가 선택 사항 인 경우 가능한 모든 값 (프로모션에서)이 미리 채워 져야합니다 . 또는 텍스트 매개 변수 유형을 사용하십시오.
해결책
예, 정확히 동일한 설정이 있습니다. 빌드 작업 (SVN 커밋 기반)과 수동으로 실행 된 배포 작업입니다. 사용자가 빌드 작업 (이전 빌드 포함) 에서 빌드를 선택하면 프로모션 상태 링크 로 이동 하여 DEV 에 배포 , QA에 배포 등과 같은 다양한 배포 프로모션을 실행할 수 있습니다.
빌드 작업시 프로모션을 설정하는 방법은 다음과 같습니다 .
- 다음 플러그인이 필요합니다 : Parameterized Trigger Plugin , Promoted Builds Plugin
- 또한 이 빌드 작업에 대한 기본 아티팩트 아카이브 후 빌드 작업 을 설정해야합니다 .
- 확인 표시 Promote builds when
- "Deploy to DEV" 이름 정의
- 아래 기준 마크 확인 수동으로 승인 만
- 아래 작업은 사용 트리거 / 전화 다른 프로젝트에 빌드
- 에서 빌드 프로젝트 당신에 이름을 입력 배포 여기에 작업
- 마크 확인 자신의 빌드 트리거 프로젝트 때까지 블록을 완료
- 트리거 된 빌드가 다음보다 나쁘거나 같으면이 빌드를 실패로 표시 : FAILURE (배포 작업의 상태에 따라 조정)
- 사전 정의 된 매개 변수 (코드 A)
코드 A :
Server=IP_of_my_dev_server`
Job=$PROMOTED_JOB_NAME`
BuildSelection=<SpecificBuildSelector><buildNumber>$PROMOTED_NUMBER</buildNumber></SpecificBuildSelector>
위의 미리 정의 된 매개 변수 섹션에서 = 왼쪽에있는 이름은 배포 작업에 정의 된 매개 변수입니다 . 그리고 =의 오른쪽에는이 프로모션이 실행될 때 해당 매개 변수에 할당 될 값이 있습니다. 세 개의 매개 변수를 정의합니다 Server
, Job
하고 BuildSelection
.
Server=
내 배포 작업은 여러 서버에 배포 할 수 있으므로 매개 변수 는 내 소유 입니다. 그러나 배포 작업이 항상 특정 위치에 배포되도록 하드 코딩 된 경우 에는 필요하지 않습니다.
Job=
매개 변수가 필요하지만 PARAM의 이름은 당신이 당신에 설치를했습니다에 따라 달라되어 배포 작업 (I 구성도를 설명 할 것이다). 값 $PROMOTED_JOB_NAME
은 그대로 유지해야합니다. 승격 프로세스가 인식하고 빌드 작업 의 이름 (승격 프로세스가 구성된 작업)을 다시 참조하는 환경 변수입니다.
BuildSelection=
매개 변수는 필수입니다. 이 전체 라인은 그대로 유지되어야합니다. 전달 된 값 $PROMOTED_NUMBER
은 프로모션에서 다시 한 번 인식하는입니다. 귀하의 예에서는 #39
.
블록 트리거 프로젝트가 완료 될 때까지 빌드 까지 체크 표시가 승격 프로세스 대기를 만들 것입니다 배포 작업을 완료했다. 그렇지 않으면 승격 프로세스가 배포 작업을 트리거하고 성공적으로 종료됩니다. 대기 배포 마무리 작업은 경우 그 혜택이 배포 작업이 실패, 프로모션 스타가 너무 오류가 표시됩니다.
(여기에 하나 개의 작은 노트 : 프로모션 별이 성공적으로 나타납니다 동안 배포 . 작업이 실행되는 배포 오류가있을 경우, 그것은 단지 이후 실패로 변경됩니다 배포 . 마무리 작업이 논리 ...하지만 조금 혼란 스러울 할 수 있습니다 경우 배포가 완료되기 전에 프로모션 스타를보세요)
Here is how to setup deploy job
- You will need Copy Artifacts plugin
- Under This build is parameterized
- Configure a parameter of type Choice (or Text) with name
Server
(this name has to match with configuration in promotion's Predefined Parameters in previous section) - Choices: Enter list of possible server IPs that would be used by the promotion's Predefined Parameters in previous section (see update note below)
- Configure a parameter of type Choice (or Text) with name
Job
(this name has to match with configuration in promotion's Predefined Parameters in previous section) - Choices: Enter the name of your build job as default.
This is only needed if you trigger the deploy job manually. When the deploy job is triggered from promotion, the promotion will supply the value(theJob=
from Predefined parameters that we configured). Also, if there is no value passed from promotion's Predefined parameters, the first choice value will be used. If you have a 1-to-1 relationship between the build and deploy jobs, you can omit theJob=
parameter in promotion's configuration. - Update: since version 2.23 of Parameterized Trigger, the available choices in the deploy job configuration have to have all possible values coming from the promotion's predefined parameters. If you don't want that limit, use "Text" instead of "Choice"
- Configure a parameter of type Build selector for Copy Artifact with name:
BuildSelection
- Default Selector: Latest successful build
- Under Build steps
- Configure Copy artifacts from another project
- In Project name enter
${Job}
- At Which build choose
Specified by a build parameter
- In Parameter Name enter
BuildSelection
(without${...}
!) - Configure the rest accordingly for your artifacts that will be copied from build job to deploy job's workspace
- Use the copied artifacts inside the deploy job as you need in order to deploy
So now, with the above deploy job, you can run it manually and select which build number from build job you want to deploy (last build, last successful, by build number, etc). You probably already have it configured very similarly. The promotion on the build job will basically execute the same thing, and supply the build number, based on what promotion was executed.
Let me know if you got any issues with the instructions.
표시된 답변은 질문에 대한 훌륭한 설명입니다. 그러나 나는 "어떻게 특정 빌드 번호를 다른 직업에서 젠킨스로부터 승격시키는 방법"을 찾는 사람들을위한 해결책을 제안하고 싶습니다.
CURL 및 REST API를 사용하여 강제 승격을 수행하기 위해 일반화 된 솔루션을 사용할 수 있습니다. Shell 또는 Groovy 스크립트에서 curl을 실행할 수 있습니다.
CURL을 사용하는 쉘 솔루션 :
user_name="jenkins_user"
user_token="token"
promotion_name="Test_Promote"
jenkins_url="http://build-server.com"
JOB_NAME="job_name"
JOB_NO="job-no"
url="--silent -u $user_name:$user_token $jenkins_url/job/$JOB_NAME/$JOB_NO/promotion/forcePromotion?name=$promotion_name"
curl $url
Groovy Soultion:
user_name="jenkins_user"
user_token="token"
promotion_name="Test_Promote"
jenkins_url="http://build-server.com"
JOB_NAME="job_name"
JOB_NO="job-no"
def response = "curl -u $user_name:$user_token \" $jenkins_url/job/$JOB_NAME/$JOB_NO/promotion/forcePromotion?name=$promotion_name".execute().text
Jenkins 사용자 토큰 생성 방법 : https://jenkins.io/blog/2018/07/02/new-api-token-system/
'IT Share you' 카테고리의 다른 글
파이썬 요청 requests.exceptions.SSLError : [Errno 8] _ssl.c : 504 : EOF가 프로토콜 위반으로 발생했습니다. (0) | 2020.11.30 |
---|---|
빌드가 성공했지만 Netbeans 7.2에“Unable to resolve identifier”가 표시됨 (0) | 2020.11.30 |
Composer 및 autoload.php를 사용하여 PHPUnit의 클래스 자동로드 (0) | 2020.11.30 |
ToString ( "N0") 형식이란 무엇입니까? (0) | 2020.11.30 |
객체 ID 배열로 몽구스 스키마를 만드는 방법은 무엇입니까? (0) | 2020.11.30 |