웹훅이란 ? 깃랩🦊 머지(푸시)후 젠킨스 자동 배포 설정

2024. 3. 25. 00:14·공부/기타

  • 회사생활을 오래 하다 보니 어느덧 몇개 프로젝트의 배포 담당자가 되었다.
  • 우리 회사에서 사용하는 프로젝트의 배포 구조는 대충 featuer-develop-staging-master의 4단계의 구조를 가지고 있다.
  • 이 중에 featuer브랜치에서 develop로 온MR(=PR)을 리뷰 및 승인하고 젠킨스에서 배포하는게 내 역할이다.

 

  • 다만 여기저기서 연락이 오다 보면 정작 MR을 승인하고 배포를 까먹는 경우가 빈번했고 귀찮기도 해서 머지리퀘스트를 승인하면 자동배포가 되도록 설정해보려고 한다.

할일 (예상)

  • 우선 내 컴퓨터에서 테스트하기위해 할일을 리스트업 해봤다.(컴퓨터를 바꿔서 아무것도 설치가 안되어있다.)
  1. 자바설치(21)
  2. 젠킨스설치 (윈도우용)
  • 깃랩 플러그인 설치
  • 트리거 셋팅
  1. 깃랩
  • 웹훅 셋팅
  1. 테스트
  • featuer->develop MR
  • develop->master MR

실제로 한일

  • 예상했던것에 추가됐던 일은 ❗ 를 붙혀 표기함.
  1. 자바설치(21)
  2. 젠킨스설치 (윈도우용)
  • ❗ 젠킨스 서버 포트포워딩(깃랩[외부서버]에서 로컬서버로 접근하기 위한 포트포워딩)
    • 검색어 : U+ 포트포워딩 (U+ 인터넷을 사용하고 있음)
  • ❗ 깃랩-젠킨스 소스코드 연동
    • 깃 설치(젠킨스가 설치된 서버 = 윈도우)
      • 깃이 설치되어있지 않으면 젠킨스와 깃 연동을 위한 깃 명령어를 사용할 수가 없다.
    • SSH 키 발급, 깃랩 SSH 등록 및 젠킨스 credential 등록
  • 깃랩 플러그인 설치
    • jenkins관리 > plugins > available plugins > gitlab 검색 후 나오는 플러그인 install
  • 트리거 셋팅
    • Accepted Merge Request Events
    • Filter branches by name : develop(include),master(exclude - 급조한 깃랩프로젝트라 main 브랜치임)
      • 깃랩-젠킨스 소스코드가 연동되야 오류가 안난다.

 
 

  1. 깃랩
  • 웹훅 셋팅

    • 웹 훅 트리거는 Merge request events
    • Error 403 anonymous is missing the Job/Build permission 오류
      • 2.젠킨스설치 중 깃-젠킨스 연동이 안된경우에는 anonymous로 웹훅을 주는데, 이걸 해결하려면 젠킨스에서 anonymous에 빌드 권한을 주면 되긴하나 이건좀 그럼

 

  1. 테스트
  • 잘 된다 !
    • 젠킨스 빌드 히스토리
    • 깃랩 웹훅 히스토리

 

결론

  • 이로써 다음 초록색박스를 자동화했다. 내일 회사가서 요청해봐야겠다.(우리회사 깃,젠킨스관리는 다른부서에서 한다)

    • 물론 젠킨스 빌드가 실패하는 경우에 대해서 고려해봐야 한다.
      • 내부망이고 slack도 안쓰는 회사라서 SMTP서버를 통한 메일 발송정도가 무난할 것 같다.
  • 올해 목표는 테스트 자동화인데 관련해서 파이프라인을 만들면 재미있을 것 같다. (갈길은 멈)

 

TMI

웹훅(WEBHOOK)이란?

- 특정 행동이 발생했을 때 해당 이벤트를 전달하는 HTTP 기반 콜백함수다.
    - ex) 깃랩의 머지리퀘스트 이벤트가 발생하면 젠킨스로 이벤트를 전달한다.

- 활용처 : 알람(결제,메일,메시지(슬랙) 등) ,특정 이벤트 실행(젠킨스 빌드 등)
- API Polling : 클라이언트가 서버에 정기적으로 요청을 보내 최신 상태를 확인하는 프로세스
    - 웹훅과의 차이점 
        - API풀링은 서버에 주기적으로 이벤트 확인, 웹훅은 발생시 보내주는 차이가 있음.
        - 웹훅은 풀링에 비해 구현이 복잡함(이벤트 감지, 적절한 데이터준비, 엔드포인트로 데이터를 보내는 로직 구현 등)
        - 웹훅 실패처리 로직 구현 필요, 풀링은 단순 조회기 때문에 구현 불필요

웹훅 예제로 살펴보기

  • 아래는 스프링부트에서 웹훅 받는쪽을 구현한 예제이다. 보시다시피 일반 rest api와 차이가 없다.
@RestController // @Controller + @ResponseBody
public class WebhookController {

    @PostMapping("웹훅받는쪽URL")
    public ResponseEntity<?> receiveWebhook(@RequestBody String payload) {

        /*
        * 웹훅 RQ를 받았을 때 처리 구현부
        */

        return ResponseEntity.ok().body("Webhook received successfully"); // HTTP 200 OK + 잘받았다는 메시지로 응답
    }
}
  • 웹훅 보내는쪽 구현 - 웹훅을 콜백인터페이스로 구현해서 특정 메서드 실행 시 콜백 실행 할 수 있음
  • AOP에 @After 어노테이션으로도 구현할 수 있을듯(포인트컷 잘 해서)
1. 콜백 인터페이스 정의
@FunctionalInterface
public interface WebhookCallback {
    void execute(T 전달할요청이담긴 객체);
}

2. sendWebhook 메서드 만들기

    public void sendWebhook(String url, T 전달할요청이담긴 객체) {

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        HttpEntity<T> request = new HttpEntity<>(전달할요청이담긴 객체, headers);

        restTemplate.postForObject(url, request, String.class);

    }
3. 구현부

    public void mergeRequest(String 파라미터, WebhookCallback callback) {
        /*
          머지리퀘스트 구현부
        */
        callback.execute(전달할요청이담긴 객체);

        System.out.println("Merge request 처리 및 콜백 실행 완료");
    }

4. 머지리퀘스트에 콜백

  mergeRequest(파라미터, 전달할요청이담긴 객체 -> {
      sendWebhook(url,전달할요청이담긴 객체);
  });

 

깃랩의 웹훅

  • 깃랩 웹훅을 쏠 수 있는 이벤트는 다양하니 이를 활용해서 재미있는것들을 개발해 볼 수 있을듯 하다.
  • Push events
  • Tag push events
    • A new tag is pushed to the repository.
  • Comments
    • A comment is added to an issue or merge request.
  • Confidential comments
    • A comment is added to a confidential issue.
  • Issues events
    • An issue is created, updated, closed, or reopened.
  • Confidential issues events
    • A confidential issue is created, updated, closed, or reopened.
  • Merge request events
    • A merge request is created, updated, or merged.
  • Job events
    • A job's status changes.
  • Pipeline events
    • A pipeline's status changes.
  • Wiki page events
    • A wiki page is created or updated.
  • Deployment events
    • A deployment starts, finishes, fails, or is canceled.
  • Feature flag events
    • A feature flag is turned on or off.
  • Releases events
    • A release is created, updated, or deleted.
  • Emoji events
    • An emoji is awarded or revoked. Which emoji events trigger webhooks?
반응형
저작자표시 (새창열림)
'공부/기타' 카테고리의 다른 글
  • 커밋 컨벤션 소개 - 깃모지를 이용해 협업을 더 깔끔하게 하기
  • 코드리뷰를 위한 지침 '코드리뷰 피라미드'
  • AWS Industry Week 2023 후기
  • 아카마이(CDN)은 뭘까?🌎
JangGiraffe
JangGiraffe
안녕하세요~ 반갑습니다! 머무시면서 즐거운 시간 보내시길 바랍니다. 오픈카톡 : https://open.kakao.com/o/sYEBs0uh
  • JangGiraffe
    giraffe1010
    JangGiraffe
  • 전체
    오늘
    어제
    • 분류 전체보기 (390)
      • 공부 (155)
        • AI (3)
        • Spring (10)
        • JAVA (31)
        • python (6)
        • 기타 (12)
        • 메세지 (3)
        • Jsp,Servlet (4)
        • HTML (12)
        • Javascript (6)
        • C#,ASP.NET (2)
        • WEB (2)
        • DB (11)
        • Android (18)
        • [BaaS]Parse.com (4)
        • 졸업프로젝트 (4)
        • AWS,네이버클라우드플랫폼 (2)
        • Ubuntu (6)
        • maven (1)
        • 자료구조 (15)
        • 서버 (3)
      • 게임 (0)
      • 관심 (22)
        • 사진 (1)
        • 패스오브엑자일(POE) (1)
        • 월드오브워크래프트 (4)
        • 블로그 (7)
        • 이슈 (1)
        • IT (5)
        • 기타 게임 (3)
      • 자료 (2)
        • 면접 (2)
      • 먹거리 (103)
        • 음식리뷰 (99)
        • 카페리뷰 (4)
      • 여행 (35)
        • 국내여행 (23)
        • 해외여행 (12)
      • 생활정보 (68)
        • 생활정보 (33)
        • 상품리뷰 (34)
        • 세미나후기 (1)
      • 끄적끄적 (5)
        • 영화후기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 문의(카톡)
    • 방명록
  • 링크

    • 2zino
    • wildbluffer
  • 공지사항

  • 인기 글

  • 태그

    월드오브워크래프트
    ChatGPT
    마곡맛집
    왕십리맛집
    가양맛집
    오징어난전
    발산맛집
    맛집
    와우
    홍대맛집
    돈벌기
    시즈오카
    강서구맛집
    제주도맛집
    김포맛집
    양양 가볼만한 곳
    발산 회식
    떡볶이
    강원도여행
    자취
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
JangGiraffe
웹훅이란 ? 깃랩🦊 머지(푸시)후 젠킨스 자동 배포 설정
상단으로

티스토리툴바