PLAYDATA 주간회고

플레이데이터 풀스택 백엔드 9기 7월 3주차 회고

Berry-mas 2025. 7. 28. 01:23

플레이데이터 풀스택 백엔드 9기 18주차 주간회고 및 학습기록 (열여덟번째 기록)


Jenkins를 로컬 환경에서 실행하기 위해 필요한 설정들을 정리하고자 한다. 

 

[GitHub Push]
    ↓
[Jenkins]
    - 백엔드 빌드 (.jar or Docker)
    - 프론트 빌드 (정적 파일)
    - Docker 이미지 빌드 + Push
    - k8s manifest 준비
    ↓
[GitOps: ArgoCD]
    - 이미지 버전 감지 후 자동 배포
    - K8s 클러스터에 반영

 

 

 4차 프로젝트였기 때문에 위와 같은 흐름만 진행해봤다. 최종프로젝트 때는 모니터링까지 다 해보고자 한다.

 

1. Jenkins plugin 설정 

로컬에서 Jenkins에 접속하면 (난 18080 포트로 지정하였다) 일단 플러그인을 깔아준다.

 

기본 CI/CD용

Git plugin GitHub 리포지토리 연동 (필수)
Pipeline Jenkinsfile을 통한 파이프라인 스크립트 실행
NodeJS plugin 프론트 빌드 시 npm install, npm run build에 필요
Gradle Plugin 또는 Maven Integration 백엔드 빌드 시 사용
Docker Pipeline Jenkins Pipeline에서 Docker 빌드/푸시 작업 가능
Blue Ocean (선택) 파이프라인 UI를 더 보기 좋게 만듦

 

 

Docker 관련

Docker plugin Docker 서버와 Jenkins 연결 가능 (Docker.sock)
Docker Pipeline Jenkins Pipeline 내에서 docker.build(), withDockerRegistry() 사용 가능

 

연동/인증용

GitHub plugin GitHub OAuth, webhook 설정 등에 필요
Credentials Binding Plugin DockerHub/GitHub Token 등의 시크릿 변수 등록 후 사용할 수 있음
Environment Injector Plugin 환경변수 주입 (선택)

 

기타

Locale Jenkins UI의 언어를 강제로 영어 또는 원하는 언어로 고정시켜주는 플러그인
Pipeline: Stage View Jenkinsfile을 기반으로 한 파이프라인의 각 단계(Stage) 시각화를 해주는 플러그인
Publish Over SSH Jenkins가 다른 서버에 SSH로 파일 전송/명령 실행할 수 있게 해주는 플러그인

2. Credentials 설정

ID  용도   
ssh-jenkins-github--key GitHub SSH 키 (레포지토리 Clone 시 사용) GitHub 연동 시 필요
DOCKERHUB_PASSWORD DockerHub 로그인 (Docker Push 시 필요) Docker 빌드/푸시 시 필요
discord Discord Webhook 토큰 등 (알림용) 선택 사항 (알림 쓸 때만)
github GitHub Personal Access Token (PAT) GitHub API 또는 HTTPS Clone 시 필요
jwt-secret jwt-secret-key jwt를 이용한 로그인 구현 시 필요

2.1. ssh-jenkins-github--key

먼저, SSH 키쌍을 생성한다. 다음과 같은 명령어를 cmd/터미널에 입력하면 키가 생성된다. 생성한 후, .ssh 폴더로 들어가면 (cmd/터미널에 경로가 나온다.) 여기서 jenkins@yourdomain.com은 누가 생성했는지 식별하기 위해 쓰는 주석이다.
이 명령어 뒤에 -f id_rsa_jenkins_github를 쓰면 id_rsa_jenkins_github이라는 이름의 파일 안에 키가 생성된다.

ssh-keygen -t rsa -b 4096 -C "jenkins@yourdomain.com"

or

ssh-keygen -t rsa -b 4096 -C "jenkins@yourdomain.com" -f id_rsa_jenkins_github

 

  • .ssh/id_rsa: Private Key (Jenkins에 등록할 키)
  • .ssh/id_rsa.pub: Public Key (GitHub에 등록할 키)

이후 Gitthub에 Public Key를 등록한다.

  1. GitHub > 오른쪽 상단 프로필 > Settings
  2. 왼쪽 메뉴 > SSH and GPG keys
  3. New SSH key 클릭
  4. Title: Jenkins SSH Key / authentication key
  5. Key: cat ~/.ssh/id_rsa.pub 한 결과 붙여넣기
    (여기서 절대 그냥 id_rsa 파일에 있는 개인키를 등록하면 안된다)
  6. Save

Jenkins에는 Private Key를 등록한다.

  1. Jenkins 대시보드 → Manage Jenkins → Credentials
  2. (혹은 Manage Jenkins → Security → Credentials)
  3. (global) → Add Credentials 클릭
  4. 입력 항목
    항목 
    Kind SSH Username with private key
    Username git (GitHub는 SSH 접속 시 git@github.com 사용)
    Private Key cat ~/.ssh/id_rsa 해서 붙여넣기
    ID ssh-jenkins-github-key (식별자, 나중에 Pipeline에서 사용 가능)
    Description Jenkins SSH key for GitHub access

 

2.2. DOCKERHUB_PASSWORD

  1. Jenkins 웹 UI 접속
  2. → http://<EC2 퍼블릭 IP>:18080 등
  3. 좌측 메뉴에서
  4. [Manage Jenkins] → [Credentials] 클릭
  5. (global)[Add Credentials]
  6. 입력 항목
    항목
    Kind Username with password
    Username DockerHub UserName
    Secret DockerHub 비밀번호 (your_password)
    ID DOCKERHUB_PASSWORD
    Description (선택) DockerHub password credential

2.3. GitHub_PAT

먼저 Githun PAT을 발급한다. (PAT은 Jenkins가 GitHub API로 웹훅 설정, 트리거 등 호출할 때 필요하다)

  1. GitHub 접속 → 우측 상단 프로필 → Settings
  2. 좌측 메뉴에서 → Developer SettingsPersonal access tokens → Tokens (classic)
  3. [Generate new token (classic)] 클릭
  4. 다음 권한 부여:
    • repo (레포 접근/Clone용)
    • admin:repo_hook (웹훅 설정용, 선택)
    • workflow (GitHub Actions 필요 시)
  5. 생성 후 복사해 두고 Jenkins에 붙여넣기

이제 Jenkins에 등록한다.

  1. Jenkins 웹 UI 접속
  2. → Manage Jenkins → Credentials → (global) → Add Credentials
  3. 입력 항목
    항목
    Kind Username with password
    Username Github 계정 아이디
    Password GitHub에서 발급받은 PAT (ghp_xxxxxxxxxxxxxxxxxxxxxxxxx)
    ID GITHUB_PAT (파이프라인에서 쓰기 쉽게 ID 지정)
    Description GitHub Personal Access Token

2.4. jwt-secret

  1. Jenkins 웹 UI 접속→ Manage Jenkins → Credentials → (global) → Add Credentials
  2. 입력 항목
    필드명 입력값 예시 설명
    항목
    Kind Secret text
    Secret 실제 JWT 서명용 시크릿 문자열
    ID jwt-secret
    Description (선택사항, 설명용)  JWT Secret for Oliveyoung

3. Webhook 및 ngrok설정

3.1. ngrok 설치 및 설정

ngrok은 로컬 서버를 외부에서 접근 가능하게 만들어주는 터널링 도구이다. Jenkins 웹훅, API 테스트, 프론트엔드 개발 중 외부에서 백엔드 호출 같은 경우에 굉장히 유용하다. 

  • 필요한 이유
    상황  문제  ngrok의 역할
    모바일 디바이스에서 내 백엔드 테스트 모바일은 localhost 인식 못함 외부 HTTPS 주소로 접속 가능
    친구나 팀원에게 내 로컬 서버 보여주고 싶음 상대방은 내 내부 IP 몰라 공유 가능한 주소 생성
    API 서버를 외부 도구(Postman, Slack 등)에서 호출하고 싶음 외부는 로컬 접근 불가 안전한 HTTPS로 연결
    GitHub 웹훅 → Jenkins GitHub는 내 localhost로 접근 불가  
  1. grok 압축파일 다운받아 압축 풀기 (https://ngrok.com/download)
  2. ngrok 계정을 만들어서 왼쪽 네비게이션 바에서 Yout Authtoken을 누른 후 토큰 복사
  3. cmd/터미널에 ngrok config add-authtoken $YOUR_AUTHTOKEN를 입력한다.
  4. 아래 명령어로 외부에서 내 PC의 18080포트로 접속할 수 있게 터널링하는 명령어를 사용한다.
    ngrok http 18080
  5. 화면에 나오는 forwarding의 주소를 통해 접속하면 jenkins로 접속 가능하다.

3.2. GitHub 레포에서 Webhook 등록

  1. GitHub → 해당 레포지토리 접속
  2. 상단 탭 Settings 클릭
  3. 좌측 메뉴에서 Webhooks 클릭
  4. 오른쪽 상단 [Add webhook] 버튼 클릭
  5. Webhook 정보 입력
    항목
    Content type application/json
    Secret (비워둬도 됨. 보안 필요시만 설정)
    SSL 인증서 보통

    Enable SSL verification
    Events "Just the push event." (또는 PR 이벤트도 체크 가능)
    활성화 여부 Active 체크
    Payload URL http://<JENKINS_IP>:18080/github-webhook/