본문 바로가기
우당탕탕 개발생활/_Jenkins

[Jenkins] GitLab 푸시 이벤트 훅 테스트 방법 (push event hook test)

by J-2n 2023. 6. 14.

안녕하세요

Jenkins로 GitLab Branch에 push되면 자동으로 빌드가 일어나도록 설정하기 위해서 가장 중요한건 hook 설정인데요. 이 방법에 대해 자세히 알아보겠습니다.


# Version

Jenkins 2.346.1

GitLab 11.5.1-ee


# GitLab 설정

1. 프로젝트 진입 > 왼쪽 탭의 Settings > Integrations 클릭

2. 옵션값을 입력한다. (아래 Jenkins 설정 참고)

① - 해당 통합과 연결할 대상 서비스의 URL을 입력하는 곳이다. 

② - GitLab과 다른 시스템 간의 보안 및 신원 확인을 위해 사용되는 비밀 키다. 이 토큰은 보안 목적으로 사용되며, 인증이나 권한 부여와 같은 작업에서 신뢰성을 보장하는 데 도움을 준다.

Webhook 보안: GitLab에서 Jenkins 또는 다른 CI/CD 시스템과 통합할 때, GitLab은 특정 이벤트가 발생할 때 웹훅을 트리거 하는데, 이때 "Secret Token"을 사용하여 웹훅 요청의 무결성을 검증하고, 누구나 웹훅을 위조하는 것을 방지한다. GitLab과 통합하는 외부 시스템에서는 이 "Secret Token"을 사용하여 요청의 유효성을 확인한다.

③ - branch 지정을 한다. (ex. dev/prod)

모두 입력 후 Add webHook 버튼 클릭 한다.


# Jenkins 설정

1. Dashboard > 설정하는 item > 구성 > 빌드 유발

옵션 설명

  1. Build whenever a SNAPSHOT dependency is built: 이 옵션은 Maven 프로젝트에서 SNAPSHOT 종속성이 빌드될 때마다 해당 종속성을 사용하는 Jenkins 프로젝트의 빌드를 트리거한다. 즉, 다른 Maven 프로젝트에서 SNAPSHOT 종속성의 버전이 업데이트되면 해당 Jenkins 프로젝트도 자동으로 빌드된다.
  2. 빌드를 원격으로 유발 (예: 스크립트 사용): 이 옵션은 외부 시스템에서 Jenkins 빌드를 원격으로 트리거하는 데 사용된다. 예를 들어, 스크립트 또는 명령을 실행하여 Jenkins API를 호출하고, 특정 잡을 실행하도록 지정할 수 있다. 이를 통해 다른 CI/CD 시스템이나 스크립트에서 Jenkins 빌드를 자동으로 시작할 수 있다.
  3. Build after other projects are built: 이 옵션은 다른 Jenkins 프로젝트(잡)가 성공적으로 빌드된 후에 현재 프로젝트(잡)를 실행한다. 이는 다른 프로젝트가 종속성으로 사용되는 경우 유용하다. 다른 프로젝트가 성공적으로 빌드된 경우에만 실행할지, 실패한 경우에도 실행할지 선택할 수 있다.
  4. Build periodically: 이 옵션은 일정한 간격으로 빌드를 실행하도록 스케줄링하는 것이다. Cron 표현식을 사용하여 실행 주기를 지정할 수 있다. 예를 들어, "H * * * *"는 매 시간마다 빌드를 실행한다.
  5. Build when a change is pushed to GitLab. GitLab webhook URL: 이 옵션은 GitLab 저장소에서 푸시 이벤트가 발생할 때 Jenkins 빌드를 실행한다. 이를 위해 GitLab과 Jenkins를 연동하고, GitLab 웹훅을 설정해야 한다. GitLab webhook URL을 지정하여 GitLab 저장소에서의 푸시 이벤트를 Jenkins에게 전달하고 빌드를 트리거할 수 있다.
  6. Generic Webhook Trigger: 이 옵션은 외부 시스템에서 Jenkins로 웹훅을 통해 HTTP POST 요청을 보내면 빌드를 트리거하는 데 사용된다. 사용자 정의 웹훅 페이로드를 통해 빌드 파라미터를 전달하고, 해당 파라미터를 기반으로 빌드를 유발할 수 있다.
  7. GitHub hook trigger for GITScm polling: 이 옵션은 GitHub 저장소의 변경 사항을 주기적으로 확인하고, 변경이 감지될 때마다 Jenkins 빌드를 트리거한다. Git SCM을 사용하여 GitHub 저장소를 폴링하여 변경 사항을 감지한다.
  8. Poll SCM: 이 옵션은 지정된 시간 간격마다 SCM(System Configuration Management)에 대한 변경 사항을 확인하여 변경이 있을 때마다 Jenkins 빌드를 트리거한다. SCM(예: Git, Subversion)에서 지정된 시간마다 변경 사항을 검색하여 빌드를 유발한다.
Build when a change is pushed to GitLab. GitLab webhook URL: 상세 옵션
Build whenever a SNAPSHOT dependency is built: 이 옵션은 Maven 프로젝트에서 SNAPSHOT 종속성이 빌드될 때마다 해당 종속성을 사용하는 Jenkins 프로젝트의 빌드를 트리거한다. 즉, 다른 Maven 프로젝트에서 SNAPSHOT 종속성의 버전이 업데이트되면 해당 Jenkins 프로젝트도 자동으로 빌드된다.

빌드를 원격으로 유발 (예: 스크립트 사용): 이 옵션은 외부 시스템에서 Jenkins 빌드를 원격으로 트리거하는 데 사용된다. 예를 들어, 스크립트 또는 명령을 실행하여 Jenkins API를 호출하고, 특정 잡을 실행하도록 지정할 수 있다. 이를 통해 다른 CI/CD 시스템이나 스크립트에서 Jenkins 빌드를 자동으로 시작할 수 있다.

Build after other projects are built: 이 옵션은 다른 Jenkins 프로젝트(잡)가 성공적으로 빌드된 후에 현재 프로젝트(잡)를 실행한다. 이는 다른 프로젝트가 종속성으로 사용되는 경우 유용하다. 다른 프로젝트가 성공적으로 빌드된 경우에만 실행할지, 실패한 경우에도 실행할지 선택할 수 있다.

Build periodically: 이 옵션은 일정한 간격으로 빌드를 실행하도록 스케줄링하는 것이다. Cron 표현식을 사용하여 실행 주기를 지정할 수 있다. 예를 들어, "H * * * *"는 매 시간마다 빌드를 실행한다.

Build when a change is pushed to GitLab. GitLab webhook URL: 이 옵션은 GitLab 저장소에서 푸시 이벤트가 발생할 때 Jenkins 빌드를 실행한다. 이를 위해 GitLab과 Jenkins를 연동하고, GitLab 웹훅을 설정해야 한다. GitLab webhook URL을 지정하여 GitLab 저장소에서의 푸시 이벤트를 Jenkins에게 전달하고 빌드를 트리거할 수 있다.

GitLab 설정의 1번에는 Jenkins의 1번을 입력해주면 되고, 2번에는 Jenkins의 고급>Secret token을 입력해주면 된다.

자동 빌드를 진행할 것이라면 위와 같이 Jenkins 옵션을 선택해주면 된다.


# Hook Test 진행

1. Test는 GitLab에서 진행한다.

2. 프로젝트 진입 > 왼쪽 탭의 Settings > Integrations 클릭

3. 등록된 WebHook의 Edit 버튼 클릭

4. Save changes 옆의 Test 클릭하여 필요한 Event 발생 시킨다.

5. 하단의 Recent Deliveries 에서 테스트 성공/실패를 확인하고 view Details 를 누르면 로그 확인이 가능하다.


공부하기 위한 기록으로 틀린 정보가 있을 시 알려주시면 감사하겠습니다 :)