간단 지식/SW validation&verification

05. Github Pull Request로 jenkins에서 빌드

납작한돌맹이 2021. 4. 16. 17:37
반응형

원래 목표는 fork한 레포지토리에서 pull request를 날리면 즉시 젠킨스에서 자동으로 빌드하는 것이었다. 하지만 정말 몇날 며칠을 고민해도 알 수 없는 문제로 인해 빌드 주기를 설정하여 pull request 받은 내역들을 주기적으로 자동빌드하기로 했다.  

 

1. github 관련 plugin 설치

GitHub Integration Plugin, GitHub Pull Request Builder

이 외의 것은 아마 깃허브와 젠킨스를 연동할 때 설치했었을 것이다.

 

 

2. github webhook 추가

웹훅이란 trigger 발생 시 HTTP POST payload를 웹훅에서 설정한 URL로 보내주는 서비스이다. 여기서 payload는 젠킨스 url/github-webhook/을 입력해주고 secret에는 깃허브 계정의 personal token을 입력해주면 된다.

캡쳐 화면 하단에는 'Which events would you like to trigger this webhook?' 질문이 있는데 'Let me select individual events'를 체크하고 pull requests를 선택하자.

 

올바르게 입력하면 아래와 같은 문구를 홈페이지 상단에서 볼 수 있다.

 

delivery test도 해볼 수 있다.

 

 

3. 인증키 생성

jenkins가 설치되어 있는 서버에서 인증키를 생성하자.

$ ssh-keygen -t rsa -f id_rsa

생성 후 ls를 해보면 2개의 파일이 생긴다.

하나는 id_rsa, 하나는 id_rsa.pub

 

먼저, 개인키(id_rsa)는 젠킨스에서 설정한다. 젠킨스에서 아래 경로를 타고 가자.

그리고 add credential 후 scope은 global, username은 pullRequest, private key는 그대로 복사 붙여넣기 한다.

 

그 다음 공개키(id_rsa.pub)은 깃허브에서 설정한다.

깃허브에 접속해서 setting의 deploy keys에 들어가서 title은 jenkins, key도 그대로 복사 붙여넣기 한다. 

 

자세한 사항은 아래 블로그를 참고하자.

taetaetae.github.io/2018/02/08/github-with-jenkins/

 

Github과 Jenkins 연동하기

Jenkins에서 Github의 소스를 가져와서 빌드를 하는 등 Github과 Jenkins와 연동을 시켜줘야하는 상황에서, 별도의 선행 작업이 필요하다. 다른 여러 방법이 있을수 있는데 여기서는 SSH로 연동하는 방법

taetaetae.github.io

 

 

4. 프로젝트 구성 설정

일단 전체 젠킨스 환경 설정에 가보면 github pull request builder 부분이 생겼다. 일전에 생성한 깃허브 credential을 추가해주자(credential이름이 github 아이디니까 credential이 많아도 헷갈리지 말자)

그리고 하단에 보면 'Auto-manage webhooks'과 'Use comments to report results when updating commit status fails'이 있는데 둘 다 체크해준다.

 

이번에는 프로젝트의 구성에서 소스코드 관리를 보자.

리포지토리 url에는 깃 리포지토리의 ssh 주소를, refspec에는 +refs/pulls/*:refs/remotes/origin/* 입력하되, 후에 젠킨스에서 빌드를 하지 못하면 heads로 바꿔주자. credential에는 아까 젠킨스에서 설정한 개인키 credential을 가져다 쓰면 된다. (branch specifier에는 특별히 branch를 나누지 않았다면 */master로 적어주자)

 

 

5. build 주기 설정

admin list에는 pull request할 리포지토리의 id와 원격 리포지토리 id를 입력해주자. 

 

 

6. pull request

이때 merge pull request를 해버리면 push에 의한 빌드와 period에 의한 빌드가 동시에 진행되기 때문에 빌드가 두 번 된다. 따라서 merge를 하지 않고 해당 branch에 계속 pull request를 하고 정한 날짜에 자동 빌드가 되도록 하는게 낫다.

 

 

(이 글이 도움이 됐다면 광고 한번씩만 클릭 해주시면 감사드립니다, 더 좋은 정보글 작성하도록 노력하겠습니다 :) )

반응형