![[Jenkins] Github 자격 증명 추가 + 웹훅 설정](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkYCAe%2FbtsMfYgqb4k%2FtBtjd6z1xQaPRlpTklWOV1%2Fimg.png)
✔️ CICD 테스트를 진행하기 앞서 테스트 환경과 관련 포스팅을 참고해주세요.
-- 테스트 환경 --
AWS EC2 : Ubuntu
WAS : Java 17, Springboot 3.x
SCM : Github
CICD : Jenkins
🧷 [Ubuntu] Java 및 Jenkins 설치 + 스왑 메모리
🧷 [Jenkins] Item 추가 및 Pipeline 작성 + 테스트
🧷 [Jenkins] 스프링부트 프로젝트 CICD 테스트 +삽질 로그
✅ 들어가기에 앞서
지난 시간까지 EC2에 Java 및 Jenkins를 설치하고 기본적인 설정까지 마칠 수 있었습니다.
이제는 본격적으로 Github 레포지토리와 Jenkins 사이의 연결 다리를 만들어주어야 하는데요.
여기서 말하는 연결 다리란 SCM 이벤트(Commit, merge 등)가 발생할 경우 Jenkins서버로 HTTP 요청을 통해 알림을 보내는 과정을 말합니다.
Jenkins에서 Github에 통합되는 소스 코드를 가져오기 위해서는(저장소 접근과정) Github 레포지토리의 인증 정보가 필요합니다. (Public 레포지토리에 대해서는 인증 정보가 필요없는지 확인해봐야 할 것 같아요.)
이러한 인증 정보를 Jenkins 스크립트에 그대로 작성해도 되지만 이 경우 보안 취약점이 생기겠죠?
그래서 Jenkins에는 Credentials이라는 인증 정보(자격 증명)를 전역변수 느낌으로 저장하고 관리하는 기능이 있습니다.
이 기능을 통해 비밀번호, API 키, SSH 키 같은 민감한 정보를 암호화된 상태로 저장하고, 빌드나 배포 파이프라인에서 안전하게 사용할 수 있습니다.
Credential은 여러 종류가 있고, 다음과 같은 장점을 가진다는 것을 확인해보면 좋을 것 같습니다.
- 코드나 스크립트에 민감한 인증 정보를 그대로 노출시키지 않을 수 있다.
- 여러 프로젝트 및 파이프라인에서 공통된 인증 정보를 재사용할 수 있다.
🔒 Jenkins Credentials 인증 정보 등록
화면과 같이 Job Name을 클릭 후 Credentials에 들어가줍니다.
그 후 해당하는 User의 'Add credentials' 버튼을 클릭하여 Github 자격 정보를 추가하도록 하겠습니다.
위에서부터 간단한 설명은 다음과 같습니다.
Kind : Credentials의 종류입니다. 여기서는 단순하게 자격 정보를 저장을 위해 'Username with password'를 선택했습니다.
Username : Github 사용자 이름을 그대로 쓰시면 됩니다.
Password : 이 부분은 Github Access Token을 발급받아서 그대로 입력하시면 됩니다. (토큰 권한은 repo, admin:repo_hook 두 가지가 설정되어 있어야 합니다.)
ID : 해당 credentials를 Jenkins 내에서 식별할 고유 ID를 뜻합니다. 공백으로 둘 시 자동 생성됩니다.
Description : 해당 credentials의 설명 부분입니다.
입력을 마친 후 Create 버튼을 통해 생성하면 인증 정보에 대한 Credentials 등록을 할 수 있습니다.
📨 웹훅 설정
이제 Jenkins 서버에서는 Credentials에 등록된 Github 자격 정보를 통해 레포지토리에 접근이 가능해졌습니다.
다음 할 일은 Github 레포지토리에서 특정 이벤트(예 : 커밋, 푸시)가 발생했을 때 Jenkins로 알림을 보내는 기능인 웹훅을 설정하는 부분입니다.
알림이라곤 했지만 내부적으로 HTTP 요청을 보내는 과정이 포함되어 있습니다.
저는 테스트 용도로 만들어두었던 아무것도 없는 레포지토리를 활용하겠습니다.
CI가 필요한 레포지토리에 들어온 후 Settings -> Webhooks 탭을 들어온 후 'Add webhook'버튼을 통해 웹훅을 설정해줍시다.
(계정 세팅으로 들어가게 될 경우 Webhooks 탭이 안보이니 꼭 레포지토리 Settings로 접근해주세요.)
Payload URL의 경우 Github에서 특정 이벤트가 발생했을 때, 해당 이벤트 정보를 전송할 서버의 주소를 입력하는 칸입니다.
이번 테스트의 경우 해당 이벤트를 Jenkins 서버에 알려야 하기에 Jenkins 서버의 도메인으로 입력했습니다.
참고로 /github-webhook/ 의 경우 Jenkins의 고정된 URL 엔드포인트로써, Jenkins는 해당 엔드포인트에서 모든 웹훅을 수신하고, 이 요청이 어떤 파이프라인(잡)에 해당하는지 자동으로 매칭합니다.
Content type은 두 가지가 있는데 여기서는 application/json으로 설정하겠습니다.
Secret의 경우 Github와 Jenkins 서버 간의 보안 검증을 위한 비밀 키입니다.
만약 Secret을 설정하지 않으면, 아무나 Jenkins 서버의 Webhook 엔드포인트로 요청을 보내 빌드를 트리거할 수 있기 때문에 중요한 보안 요소 중 하나입니다.
실제로 이 부분과 관련해서는 RSA키를 통해 설정을 진행할 수 있는데, 이번에는 단순 테스트용이므로 입력하지 않고 넘어가도록 하겠습니다.
SSL verification은 Jenkins 서버로 요청을 보낼 때, SSL 인증을 포함할 것인지 묻는 옵션입니다. 저는 SSL 인증을 설정하지 않았으니 Disable하도록 하겠습니다.
마지막으로 Trigger 설정 부분입니다. 저는 단순 Push 이벤트에 대해서만 테스트 할 것이기 때문에 상단 옵션을 선택했습니다. 혹시 이외에도 다른 이벤트(예 : 커밋, 브랜치 생성 등)가 발생해도 웹훅을 보내고 싶다면 3번째 옵션을 선택 후 원하는 항목들에 대해 추가해주시면 됩니다.
모든 설정이 끝났으므로 'Add webhook'을 통해 웹훅을 등록하겠습니다.
한가지 궁금한 점이 있으실텐데, 특정 브랜치에서만 트리거가 발생하도록 하고싶은데 해당 옵션이 보이지 않는다는 점일겁니다.
이 부분은 아마도 Github에서는 제공하지 않고 있는 것 같습니다. 이후에 Jenkins 아이템 설정에서 해당 부분을 설정할 수 있으니 걱정안하셔도 될 듯 합니다 :)
이제 Github의 해당 레포지토리는 push 이벤트에 대해서 Jenkins 서버에게 알림을 보낼 준비를 마쳤습니다.👏👏
다음은 Jenkins에서 이러한 알림이 왔을 때 어떻게 빌드를 유발할 것인지에 대해 설명하도록 하겠습니다.
'DevOps.' 카테고리의 다른 글
[Jenkins] Item 추가 및 Pipeline 작성 + 테스트 (0) | 2025.02.12 |
---|---|
[Ubuntu] Java 및 Jenkins 설치 + 스왑 메모리 (2) | 2025.02.09 |
이게 CI야? CD야? (0) | 2025.02.09 |
[INFRA] Nginx In Container?, host? (0) | 2024.04.25 |
개발 기술 블로그, Dev
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!