ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CI] Jenkins 와 Github Webhook 으로 PR 유효성 체크하기
    개발 2021. 12. 29. 18:06

     "CI"는 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미합니다. CI를 성공적으로 구현할 경우 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되므로 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있습니다.

    보통 코드를 개발한 뒤 원격 서버에 배포를 하기 위해서는 다음과 같은 과정을 거친다.

     

    Git, GitHub, Jenkins, Docker, Docker Hub 을 통한 CI/CD

    각 단계에서 개발 툴들이 어떤 역할을 하는지는 여기를 체크하자.

    이 포스팅에서는 오로지 CI 에 대해서만 다룬다.


    코드를 지속적으로 통합하기 위해서는 개발자가 각자 로컬에서 작업한 코드 변화에 대해서 시스템 안정성이 보장되느냐가 매우 중요하다. 특히 어떤 한 기능의 코드 변화가 다른 기능에 영향을 미치지 않았다는 것을 보장해야 한다. 즉 코드가 머지 되기 전에 Pull Request 를 날릴 때, 로컬에서 해당 브랜치를 받아서 -> 메인 브랜치로 머지를 하고 -> 테스트를 돌린 뒤 -> 정합성이 깨지지 않을경우 -> 원격에서 머지 해야 한다. 이 과정을 수동으로 하게 되면 코드가 변화할 때마다 개발자가 너무 귀찮고, 휴먼 에러가 나지 않을 것이라는 보장 또한 없다.

     

    깃헙에서는 이 기능을 자동화 할 수 있도록 도와주는 여러 기능을 지원하는데, Github Webhook 이다.

    Jenkins 같은 작업 자동화 툴을 사용해서, 이 PR 에 대한 체크 과정을 자동화 할 수 있다.

     

     

    Github - Jenkins 연동 플로우

    특정 레포지토리의 관리자는 직접 지정한 서버로 각 이벤트에 대한 webhook 을 날릴 수 있다.

    이벤트는 매우 다양하다. PR create, push, merge, 코멘트 등등.. 

    그 중 자동화할 작업의 필요에 따라 고르면 된다.

    이번에 자동화할 코드 통합 작업 과정을 정리해보자면 다음과 같다.

    1. Pull Request 생성
    2. github에서 jenkins로 pull request webhook 전송
    3. jenkins에서 해당 pull request를 pending 상태로 변경(merge 못하게 하기 위함)
    4. jenkins에서 compile, test 수행 (compile, test 에러시 슬랙 메세지 전송)
    5. jenkins에서 compile, test 성공시 pull request 상태를 success로 변경
    6. code review
    7. merge
    8. github에서 jenkins로 merge webhook(=push webhook) 전송
    9. docker image 빌드 후 harbor registry에 push

    github webhook 설정

    • github repository → setting → webhooks → Add webhook 클릭
    • Payload URL, Content type application/json 설정

     

    • pull request webhook 설정

    PR 관련 이벤트에 대한 웹훅을 Jenkins 서버로 발송한다.

     


    Jenkins Pipeline 으로 변수 설정하기

    페이지 왼쪽, 새로운 Item 생성 -> PipeLine -> 구성에서 설정할 수 있다.

    0. Pipeline Token 설정 

    Github Webhook 을 설정할 때 웹훅을 보낼 젠킨스 서버 URL 을 입력했을 것이다. 그 URL 끝에 붙은 token 에 지정할 값이다. 깃헙이 보낸 URL 이 해당 토큰을 반드시 파라미터로 포함하고 있어야만 이 파이프라인으로 Webhook Parameter 를 받을 수 있다.

    1. 사용자 지정 매개변수  

    Jenkins Pipeline 을 매뉴얼 실행 시 사용자에게서 받는 변수이다. 빌드할 이미지 이름 등을 받는다.

     

    2. Github Webhook Parameter

    PR 이벤트 발생 시 Jenkins 로 들어오는 요청을 말한다.

    Github 이 보낸 웹훅은, 해당 레파지토리의 세팅에서 확인할 수 있다. Json으로 설정했다면 Json 형태로 온다.

    Json Path 로 해당 값을 파라미터로 받을 수 있다.

     

     

    Pipeline 탭에서 실제 스크립트를 작성한다.

Designed by Tistory.