티스토리 뷰

Goals

1. Jenkins의  Pull Request Builder 플러그인과 Github Webhook을 이용하여 해당 Repository에 Pull Request를 하면, 자동으로 빌드가 되는 환경을 구축함

2. 빌드 실패 시 Merge 버튼이 활성화 안되도록 함

3. 설정은 아래와 같이 4단계에서 나눠서 세팅함

Step1. [Jenkins] Github Pull Request Builder 플러그인 설정

Step2. [Jenkins] Build Job 설정

Step3. [Github] Repository Webhook 설정

Step4. [Github] Branch protection rules 설정


 

Step1. [Jenkins] Github Pull Request Builder 플러그인 설정

 

Github Pull Request가 발생 시 Jenkins에 Build를 유발시키기 위해 도움을 주는 플러그인을 설치 및 설정합니다.

Jenkins 에 접속하여, 아래와 같은 경로로 Github Pull Request Builder 플러그인을 설치합니다.

Jenkins 관리 > Plugin Manager > Github Pull Request Builder 설치


정상적으로 설치가 되면 시스템 설정 으로 들어가 Pull Request Builder 를 사용할 Github의 접속정보를 설정합니다.

Tips) Credentials 는 Github Token을 발급 받아 사용합니다.
Tips) Admin list 에는 Pull Request 하는 github 계정을 설정합니다.

 

정상접속 시 Test basic connection to GitHub 에서 확인이 가능합니다.

아래와 같이 정상 Connection이 확인됩니다.

Connection 성공

 

Connection 실패

 

최종 설정 화면


Step2. [Jenkins] Build Job 설정

 

Git 연결정보

Github Event가 발생 시 Build 등 작업을 발생시킬 Repository의 Build Job을 설정합니다.

소스 코드 관리 > Git > Repositories

 

Repsitory URL에는 대상 Repository git URL을 입력합니다. 아래와 같이 Github Repository를 Clone하는 URL을 가져와서 입력합니다.

 

Tips) 그 외 정보는 아래와 같이 입력합니다.

- Credentials : Github 계정정보를 입력합니다. (Github 로그인 할때 접속 정보, 이때는 토큰방식으로 인증하지 않아도 됨)
- Refspec : +refs/pull/*:refs/remotes/origin/pr/*
- Branch Specifier : ${sha1}

 

최종 설정 화면

 

빌드 유발

GitHub Pull Request Builder 를 선택 하고 Use github hooks for build triggering 체크합니다.

Tips) Admin list 에는 Pull Request를 할 Github 계정을 지정합니다.

 

최종 설정 화면


Step3. [Github] Repository Webhook 설정

Github에서 발생한 Event(Pull Request, Push 등등..)를 캐치하여 Jenkins쪽으로 Webhook을 발생시키기 위한 설정입니다.

Github > 작업대상 Repository > Settings > Webhooks

여기까지 작업을 마쳤다면 아래 Webhooks 메뉴에 들어가면 자동으로 Webhook이 생긴걸 확인할 수 있습니다.

jenkins도메인/ghprbhook 경로로 생성이 됩니다.

Webhook 설정을 자세히 살펴보겠습니다. Payload URL은 jenkins의 도메인에 /ghprbhook 경로로 설정합니다.

Let me select individual events를 선택하면, Github의 이벤트를 캐치하여 Jenkins쪽으로 Webhook을 발생시킬수 있습니다.

Pull Request 가 생길 때, Webhook을 발생시켜야 하니 Pull requests를 선택합니다.

마지막으로 Active를 체크하고 Update webhook을 클릭하면 Webhook 설정이 끝이 납니다.

아래 보이는 Recent Deliveries는 다음 챕터에서 살펴보겠습니다.

 

Recent Deliveries

Github -> Jenkins로 Webhook 전송이 되는지 확인해봅니다.

정상전송

정상적으로 전송이 되었을 때, 초록색 체크가 생기고 클릭 시 Response로 200응답을 받은 것을 확인할 수 있습니다.

 

전송실패

환경을 구성하다가 아래와 같은 에러를 마주친 적이 있습니다.

We couldn’t deliver this payload: failed to connect

네트워크 이슈로 Webhook 전송 시 Connection이 정상 되지 않았는데, 이번 케이스는 Jenkins 서버가 폐쇄망에 위치하고 있어서, 정상 Connection을 맺지 못했습니다.

방화벽 설정 후 정상 Connection이 되었습니다.

 

전송실패 시 확인해봐야할 사항들

Jenkins 관리 > 시스템 설정 > Jenkins Location

PayLoad를 보낼 Jenkins URL과 동일하게 설정해줍니다.


Step4. [Github] Branch protection rules 설정

Build를 유발시키고 Build가 실패하면(Test 포함) 해당 Pull Request의 Merge 버튼 활성화가 안되도록 옵션을 설정합니다.

Github > 대상 Repository > Settings > Branches > Branch protection rules

Add rule 로 Branch protection rules을 하나 추가합니다.

Merge가 되기전 상태를 체크하여 빌드 실패 시 Require branches to be up to date before merging 을 선택하여, 브랜치가 최신 코드로 테스트 되도록 합니다.

 


Pull Request를 날려 빌드 확인해보기

 

빌드 실패

Pull Request 후 자동으로 빌드가 실행되고 해당 빌드가 실패하면, failed라고 메세지를 받습니다. Merge 버튼이 활성화가 되지 않는 것을 확인할 수 있습니다.

 

빌드 성공

작업이 완료된 Repository에 Pull Request를 하나 생성해봄면 아래와 같이 Build가 되고 Pending 상태로 됩니다.

정상빌드가 되면 계정 아이콘옆 주황색 점이 초록색 체크로 변경됩니다.

그 사이, Jenkins를 확인해보면 Build가 진행중인 것을 확인할 수 있습니다.


Reference

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함
Total
Today
Yesterday