Jenkins에 GitLab 웹훅 설정하기

김재혁·2025년 2월 5일

공통 프로젝트

목록 보기
3/12

Pipeline 설정

1. Jenkins 플러그인 설치

(1) Jenkins 관리자 패스워드 확인

sudo cat /var/lib/jenkins/secrets/initialAdminPassword
  • 브라우저에서 Jenkins 웹 UI 접속(설정한 포트 또는 기본 8080포트) 후 로그인

(2) 필수 플러그인 설치

  • Jenkins 웹 UI → "Manage Jenkins" → "Manage Plugins" 로 이동 후, 다음 플러그인들을 설치
    • GitLab → GitLab 웹훅 트리거 지원
    • Pipeline → Jenkinsfile을 실행하는 데 필요
    • Docker Pipeline → Docker와 연동하는 데 필요
    • SSH Pipeline Steps → EC2에 배포할 때 필요
    • Credentials Binding → Docker Hub 및 SSH 키 인증 필요
    • SSH Agent → 안전하게 SSH에 접속하기 위해 필요

2. GitLab Credentials 설정

(1) GitLab의 Access Token 발급

  • GitLab의 "User Settings" -> "Access tokens" -> "Add new token"
  • Token name 입력
  • Select scopes 선택: api, read_repository, write_repository 선택
  • "Create personal access token"

(2) Jenkins에 GitLab Access Token 등록

  • Jenkins 웹 UI → "Manage Jenkins" → "Credentials" → "Domains의 (global)" → "Add Credentials"
  • Kind: Username with password
  • Scope: Global (Jenkins, nodes, items, all child items, etc)
  • Username: GitLab 아이디 입력
  • Password: GitLab의 Access Token 입력
  • ID: Credential의 이름(ID) 지정 (ex. gitlab-token)
  • "Create"

3. Docker Hub Credentials 설정

(1) Docker Hub Access Token 생성

  • Docker Hub 로그인
  • "Account Settings" → "Security" → "Personal access tokens" → "Generate new token"
  • Access token description: Access token 이름 입력
  • Optional → Access permissions: Read, Write, Delete 선택
  • "Generate": 생성 후 복사

(2) Jenkins에서 Credentials 추가

  • Jenkins 웹 UI → "Manage Jenkins" → "Domains의 (global)" → "Add Credentials"
  • Kind: Username with password
  • Scope: Global (Jenkins, nodes, items, all child items, etc)
  • Username: Docker Hub 아이디 입력
  • Password: Docker Hub의 Access Token 입력
  • ID: Credential의 이름(ID) 지정 (ex. dockerhub-token)
  • "Create"

4. SSH 키 Credentials 설정

(1) EC2에서 SSH 키 생성

ssh-keygen -t rsa -b 4096 -C "jenkins"
  • 기본값으로 /home/ubuntu/.ssh/id_rsa 저장
  • id_rsaPrivate Key (Jenkins에서 사용)
  • id_rsa.pubPublic Key (EC2 서버에 등록)

(2) EC2에 Public Key 추가

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  • cat ~/.ssh/id_rsa.pub → 현재 사용자의 공개 키(public key)를 출력.
  • >> ~/.ssh/authorized_keys → 출력된 공개 키를 ~/.ssh/authorized_keys 파일의 끝에 추가.
chmod 600 ~/.ssh/authorized_keys
  • chmod 600 → 해당 파일(~/.ssh/authorized_keys)의 권한을 보안 설정에 맞게 조정.
  • 600 권한:
    • 소유자(현재 사용자): 읽기(r), 쓰기(w).
    • 그룹 및 다른 사용자: 접근 불가.

(3) Jenkins에 Private Key 추가

  • Jenkins 웹 UI → "Manage Jenkins" → "Domains의 (global)" → "Add Credentials"
  • Kind: SSH Username with private key
  • Scope: Global (Jenkins, nodes, items, all child items, etc)
  • ID: Credential의 이름(ID) 지정 (ex. ec2-ssh-key)
  • Username: ubuntu
  • Private Key → "Enter directly" -> "Add": id_rsa 파일 내용을 복사해서 붙여넣기
  • "Create"

5. .env 파일을 Credentials의 Secret File로 등록

(1) Jenkins에서 Secret File 등록

  1. Jenkins 웹 UI 접속 → "Manage Jenkins" → "Manage Credentials" 이동
  2. Domains의 (global) → "Add Credentials" 선택
  3. Kind: Secret file 선택
  4. Scope: Global (Jenkins, nodes, items, all child items, etc) 선택
  5. File: .env 파일을 선택하여 업로드
  6. ID: Pipeline에서 사용할 Credential ID 설정 (ex. env-file-content)
  7. "Create" 클릭하여 저장

(2) Jenkins Pipeline에서 .env 파일 사용

  • Jenkins에서 .env 파일을 보안적으로 관리하기 위해 Credentials의 Secret File로 등록할 수 있습니다. 이를 통해 Jenkins Pipeline 실행 시 환경 변수 파일을 안전하게 사용할 수 있도록 구성합니다.
  • 등록한 .env 파일을 Pipeline에서 사용하려면 withCredentials를 이용하여 Secret File을 읽어옵니다.

6-1. Single-Branch Pipeline 구성

(1) Single-Branch Pipeline Job 생성

  • Jenkins 웹 UI → "New Item"
  • Job 이름 입력 → "Pipeline" 선택 → "OK"
  • Triggers: Build when a change is pushed to GitLab. GitLab webhook URL: http://<jenkins-url>:<port>/project/<job-name> 선택
  • 고급 → Secret token → "Generate" 생성 후 복사
  • Pipeline → DefinitionPipeline script from SCM 선택
  • SCM: Git 선택
  • Project Repository 입력: GitLab 프로젝트 URL 입력
  • Credentials: gitlab-token 선택
  • Branch Specifier: 웹훅하고 싶은 브랜치 입력 (ex. */master)
  • "Save"

(2) GitLab에 웹훅 추가

  • GitLab 프로젝트로 이동
  • "Settings" → "Webhooks" -> "Add New Webhook"
  • URL 입력: http://<jenkins-url>:<port>/project/<job-name>
  • Secret token 입력: 위에서 생성한 Jenkins의 Secret token 입력
  • Trigger 선택: Push events, Merge request events 선택
  • "Add webhook"

6-2. Multi-Branch Pipeline 구성

(1) Multi-Branch Pipeline Job 생성

  • Jenkins 웹 UI → "New Item"
  • Job 이름 입력 → "Multi-Branch Pipeline" 선택 → "OK"
  • Branch SourcesGit 선택
  • Project Repository 입력: GitLab 프로젝트 URL 입력
  • Credentials 선택: gitlab-token 선택
  • Behaviours: Discover branches
  • "Save"

(2) Jenkins에서 API 토큰 생성

  • Jenkins 웹 UI → "Manage Jenkins" → "Manage Users" → "admin"
  • "Security" → "API Token" 생성 후 복사

(3) GitLab에 웹훅 추가

  • GitLab 프로젝트로 이동
  • "Settings" → "Webhooks" -> "Add New Webhook"
  • URL 입력: http://<jenkins-username>:<jenkins-api-token>@<jenkins-url>:<port>/project/<job-name>
  • Trigger 선택: Push events, Merge request events 선택
  • "Add webhook"
profile
志鐵心鏡

0개의 댓글