-
Notifications
You must be signed in to change notification settings - Fork 0
[INFRA] 4. 깃허브 PR 라벨을 기준으로 젠킨스 빌드하기
지금까지 펀잇팀은 Jenkins로 CI/CD 파이프라인을 구축했고,
GitHub hook trigger for GITScm polling
을 통해 develop 브랜치에 push 되면 빌드 트리거를 발생시키도록 구성했다.
하지만 BE, FE 모두 하나의 레포지토리에 존재하고 같은 방식으로 구성되어 있어서 하나의 PR이 merge 되어도 두 개의 파이프라인에 동시에 트리거가 발생한다는 문제점이 있었다.
이런 필요없는 동작을 없애기 위해 목적에 맞게 파이프라인이 각각 따로 동작하도록 분리할 필요성이 생겼고, PR 라벨(BE
or FE
)을 통해 트리거를 분리하기로 결정했다.

PR 라벨을 기준으로 트리거를 발생시키기 위해 Github의 Webhook 데이터를 추출할 수 있어야 한다.
이를 위해 Generic Webhook Trigger 젠킨스 플러그인을 설치하자.
해당 플러그인을 사용하면 http://JENKINS_URL/generic-webhook-trigger/invoke
로 오는 요청에 대해
JSON or XML 형태로 데이터를 추출하여 원하는 조건으로 트리거를 발생시킬 수 있다.

깃허브 레포지토리에서 Settings
- Code and automation
- Webhooks
탭으로 오면
Add webhook
을 통해 새로운 Webhook 설정을 추가할 수 있다.

- Payload URL :
http://JENKINS_URL/generic-webhook-trigger/invoke
- Content type :
application/json
- Trigger event 설정 :
Send me everything
Webhook으로 오는 요청에 대해 데이터를 추출하기 위해 모든 정보를 JSON 형태로 받도록 위와 같이 설정하고 추가해주자.

이제 젠킨스로 돌아와서 트리거 설정을 하고 싶은 아이템의 구성
- Build Trigger
로 들어와서
위와 같이 기존 GitHub hook trigger for GITScm polling
을 해제하고, Generic WebHook Triggers
를 설정하자.
다음으로 Post content parameters
탭에서 추가 버튼을 눌러서 변수를 추가할 수 있다.

- Variable : 변수 이름
- Expression :
$.pull_request.merged
(PR merge 여부)

- Variable : 변수 이름
- Expression :
$.pull_request.base.ref
(base 브랜치 이름)

- Variable : 변수 이름
- Expression :
$.pull_request.labels..name
(PR 라벨 이름들)
이후 Optional filter
탭에서 트리거를 유발시키기 위한 조건을 설정할 수 있다.

Expression
에서 원하는 조건의 표현식을 작성하고, Text
에서 해당하는 변수를 지정할 수 있다.
위의 표현식은 PR이 merge가 되었고, develop 브랜치면서, 라벨에 BE가 있는 경우를 의미한다.

Token 탭에서 Webhook에 대한 토큰을 설정할 수 있다.
그러려면 원하는 토큰 명을 작성하고, 아래에서 젠킨스 Credentials를 추가해줘야 한다.

-
Kind
: Secret Text -
Secret
: Token 탭에 작성한 토큰 명 -
Id
: Credentials 구분을 위한 이름 -
Description
: Credentials 설명

마지막으로 다시 깃허브 Webhook 설정으로 돌아가서 URL 뒤에 토큰을 추가해주면 된다.
?token=여기에_아까_Token_탭에서_작성한_토큰_명
Posted By 망고
- 📚 프론트엔드 개발 문서
- 🌏 브라우저 지원 범위
- 🧪 프론트엔드 테스트 전략
- [웹 접근성] a tag와 button의 차이는 무엇일까?
- multipart
- SvgSprite 컴포넌트 사용하기
- [INFRA] 프론트엔드 CI/CD 구축
- [기술 검토] 리액트 쿼리 도입 이유
- [기술] 로그인 기능 도입기
- 🐛 S3 배포 캐싱 오류
- 이미지를 위한 S3와 Cloudfront 설정하기
- 📓 성능리포트 ‐ 펀잇 서비스 최적화하기
- 펀잇 SEO 개선하기
- 📚 백엔드 개발 문서
- intellij에서 private DB 연결하기
- [INFRA 0] 전체 infra 구조 - ver1
- [INFRA 1] infra 서버 세팅
- [INFRA 2] 백엔드 CI/CD 구축
- [INFRA 3] 백엔드 DB 연결
- [INFRA 4] 깃허브 PR 라벨을 기준으로 젠킨스 빌드하기
- [LOG] 로그 세팅
- [Trouble Shooting] 일관된 테스트 격리 적용하기
- [Trouble Shooting] 프록시로 동작하는 @Transactional, 전파 옵션 관리