개발/CI_CD

Github PR Status With Jenkins

IamBD 2023. 8. 11. 18:08

SI 프로젝트 중 고객사 CI/CD 구축 환경 구성을 진행중에 있습니다.

 

모든 인프라는 AWS내 구성하였으며 대략적인 Workflow는 다음과 같습니다.

 

1. Github Create PR

2. WebHook을 이용하여 Jenkins Job Triiger

3. Job Triiger와 동시에 Github Status 생성 (Build, Test, Deploy 등 ..)

4. Merge를 위한 조건으로는 Build, Sonarqube 분석 Pass

5. Status All Pass시 Merge 버튼 활성화

 

이 중 2번과 3번을 해결하기 위해 Jenkins Plugin 중 Github PullRequest Builder를 사용하였으며

Sonarqube에 대한 정적분석 결과를 PR Comment로 받기 위해 sonarqube-community-bracnh-plugin을 사용하였습니다. 

 

https://github.com/mc1arke/sonarqube-community-branch-plugin

 

GitHub - mc1arke/sonarqube-community-branch-plugin: A plugin that allows branch analysis and pull request decoration in the Comm

A plugin that allows branch analysis and pull request decoration in the Community version of Sonarqube - GitHub - mc1arke/sonarqube-community-branch-plugin: A plugin that allows branch analysis and...

github.com

 

※ Jenkins, Sonarqube 는 기본 설치, Github는 Github Enterprise Server 3.8 기준으로 작성되었습니다.

 

 

Github & Jenkins 연동

 

Github와 Jenkins는 Webhook을 통해 연동을 진행합니다.

 

 

1. GIthub Pull Request Builder 플러그인 설치

(현재 보안 이슈 및 패치가 진행되지 않아 권고하진 않지만 마땅한 다른 대안은 찾지 못했습니다.)

 

외부망 연결이 가능하다면 Jenkiuns  설정 내 Plugin에서 검색 및 설치

폐쇄망이라면 아래 링크를 통해 hpi 파일을 다운받아 수동 업로드 진행

 

https://plugins.jenkins.io/ghprb/

 

GitHub Pull Request Builder

Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software

plugins.jenkins.io

 

2. 플러그인 셋팅

 

Jenkins 관리 - System 내 Github Pull Request Builder

 

 

Github Server API URL

 - API 통신 Github (자체 서버라면 해당 서버 도메인 입력)

Jenkins URL override

 - Jenkins 도메인 입력

Shared secert

 - Github에서 보낸 Webhook 암호화 키

Credentials

 - GIthub에서 발급한 API Token

 

3. Github 연결 및 파이프라인 작성시 Option 활성화

 

GIthub Project 체크 및 저장소 주소 입력

 

플러그인 설치 및 셋팅 완료 후 파이프라인 작성에 가보면 관련 옵션이 생긴걸 확인할 수 있습니다.

 

고급이나 Trigger Setup을 보면 많은 Input이 있지만 필요한 값만 확인 및 셋팅하도록 하겠습니다.

 

Admin list

  - Github 저장소 Admin 계정명 (필자는 Github Enterprise Admin 계정을 기입하였음)

Use Github hooks for build triggering

 - 해당 빌드를 Hook과 연동하여 사용 예정이기에 체크. ?를 눌렀을 때 나오는 URL 확인 필요

고급 - Whitelist Target Branches

  - main 브랜치에 대한 PR 요청만 확인 예정이기에 "main" 입력

Triiger Setup - Commit Status Context

  - Github PR Status 내 보여질 이름

 

4. GIthub Webhook 활성화

 

위 스텝대로 작성된 파이프라인을 실행시키면 Github repo 내 Hook이 생성되기 때문에

위에서 확인한 URL로 정상 등록되었는지만 확인해줍니다.

 

Github 저장소 - Settings - Webhooks 이동

 

5. Pull Request Status 활성화

 

Webhook 확인시 진입했던 설정 화면에서 Branches 메뉴로 이동합니다.

 

Add branch protection rule 클릭시 많은 메뉴가 나오는데 필요한 것만 체크하도록 합니다.

 

 

 

이렇게 Github와 Jenkins의 기본적인 Status 연동은 끝났습니다.

이제 임의로 PR을 생성해 상태를 확인하면 다음과 같은 Status Check가 붙게 됩니다.