mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 10:16:24 +00:00
- Jenkinsfile: GitHub Actions 대체 Jenkins Pipeline 구축 - 5개 백엔드 서비스 빌드 (user, meeting, stt, ai, notification) - Gradle 빌드 및 SonarQube 분석 (선택사항) - Docker 이미지 빌드 및 ACR 푸시 - Manifest 저장소 업데이트 (ArgoCD 연동) - 환경별 배포 지원 (dev/staging/prod) - deployment/jenkins/JENKINS_SETUP.md: Jenkins 설정 가이드 - Credentials 설정 방법 - JDK 21 및 SonarQube 설정 - Pipeline Job 생성 및 실행 가이드 - 트러블슈팅 가이드 - 사용 이유: GitHub Actions 차단으로 인한 대체 CI/CD 구축
257 lines
7.6 KiB
Markdown
257 lines
7.6 KiB
Markdown
# Jenkins Pipeline 설정 가이드
|
|
|
|
## 개요
|
|
GitHub Actions가 막혀 있을 때 Jenkins를 사용하여 HGZero 백엔드 서비스를 빌드하고 배포하는 가이드입니다.
|
|
|
|
## 전제 조건
|
|
|
|
### 1. Jenkins 서버 요구사항
|
|
- Jenkins 2.x 이상
|
|
- Docker가 설치되어 있어야 함
|
|
- Kustomize CLI 다운로드 가능한 환경
|
|
- 인터넷 연결 (Docker Hub, Azure Container Registry, GitHub 접근)
|
|
|
|
### 2. 필수 Jenkins 플러그인
|
|
다음 플러그인들이 설치되어 있어야 합니다:
|
|
- Pipeline (기본 포함)
|
|
- Git Plugin
|
|
- Docker Pipeline Plugin
|
|
- SonarQube Scanner Plugin (선택사항)
|
|
- Credentials Plugin (기본 포함)
|
|
|
|
## Jenkins 설정 단계
|
|
|
|
### 1단계: Credentials 설정
|
|
|
|
Jenkins 관리 → Manage Credentials → Global credentials에서 다음 credential들을 추가합니다:
|
|
|
|
#### 1.1 ACR Credentials
|
|
- **ID**: `acr-credentials`
|
|
- **Type**: Username with password
|
|
- **Username**: Azure Container Registry 사용자명
|
|
- **Password**: Azure Container Registry 비밀번호
|
|
- **Description**: Azure Container Registry Credentials
|
|
|
|
#### 1.2 Docker Hub Credentials
|
|
- **ID**: `dockerhub-credentials`
|
|
- **Type**: Username with password
|
|
- **Username**: Docker Hub 사용자명
|
|
- **Password**: Docker Hub 비밀번호 또는 Access Token
|
|
- **Description**: Docker Hub Credentials (rate limit 방지용)
|
|
|
|
#### 1.3 SonarQube Token (선택사항)
|
|
- **ID**: `sonar-token`
|
|
- **Type**: Secret text
|
|
- **Secret**: SonarQube authentication token
|
|
- **Description**: SonarQube Token
|
|
|
|
#### 1.4 Git Credentials
|
|
- **ID**: `git-credentials`
|
|
- **Type**: Username with password
|
|
- **Username**: GitHub 사용자명
|
|
- **Password**: GitHub Personal Access Token (repo 권한 필요)
|
|
- **Description**: GitHub Credentials for Manifest Repository
|
|
|
|
> **중요**: GitHub Personal Access Token 생성 시 다음 권한이 필요합니다:
|
|
> - `repo` (Full control of private repositories)
|
|
|
|
### 2단계: JDK 21 설정
|
|
|
|
Jenkins 관리 → Global Tool Configuration → JDK에서:
|
|
1. "Add JDK" 클릭
|
|
2. **Name**: `JDK21`
|
|
3. "Install automatically" 체크
|
|
4. Install from adoptium.net 선택
|
|
5. Version: jdk-21.x.x 선택
|
|
|
|
> **참고**: 또는 Jenkins 서버에 JDK 21이 이미 설치되어 있다면, 설치 경로를 지정할 수 있습니다.
|
|
|
|
### 3단계: SonarQube 서버 설정 (선택사항)
|
|
|
|
SonarQube 분석을 사용하려면:
|
|
|
|
Jenkins 관리 → Configure System → SonarQube servers에서:
|
|
1. "Add SonarQube" 클릭
|
|
2. **Name**: `SonarQube`
|
|
3. **Server URL**: SonarQube 서버 URL
|
|
4. **Server authentication token**: 앞서 생성한 `sonar-token` credential 선택
|
|
|
|
### 4단계: Pipeline Job 생성
|
|
|
|
1. Jenkins 메인 화면에서 "New Item" 클릭
|
|
2. Job 이름 입력 (예: `hgzero-backend-pipeline`)
|
|
3. "Pipeline" 선택
|
|
4. "OK" 클릭
|
|
|
|
Pipeline 설정:
|
|
1. **General**
|
|
- "This project is parameterized" 체크 (자동으로 Jenkinsfile의 parameters가 인식됨)
|
|
|
|
2. **Pipeline**
|
|
- **Definition**: Pipeline script from SCM
|
|
- **SCM**: Git
|
|
- **Repository URL**: `https://github.com/hjmoons/HGZero.git` (또는 실제 저장소 URL)
|
|
- **Credentials**: 필요시 Git credentials 선택
|
|
- **Branch Specifier**: `*/main` (또는 원하는 브랜치)
|
|
- **Script Path**: `Jenkinsfile`
|
|
|
|
3. "Save" 클릭
|
|
|
|
## Pipeline 실행
|
|
|
|
### 수동 실행
|
|
1. 생성한 Pipeline Job 선택
|
|
2. "Build with Parameters" 클릭
|
|
3. 파라미터 선택:
|
|
- **ENVIRONMENT**: `dev`, `staging`, 또는 `prod` 선택
|
|
- **SKIP_SONARQUBE**: `true` (건너뛰기) 또는 `false` (실행)
|
|
4. "Build" 클릭
|
|
|
|
### Pipeline 동작 흐름
|
|
|
|
```
|
|
1. Checkout
|
|
└─> Git 저장소에서 코드 체크아웃
|
|
|
|
2. Setup Java
|
|
└─> JDK 21 환경 설정
|
|
|
|
3. Load Environment Variables
|
|
└─> .github/config/deploy_env_vars_{환경} 파일에서 환경변수 로드
|
|
|
|
4. Build with Gradle
|
|
└─> ./gradlew build -x test 실행 (JAR 파일 생성)
|
|
|
|
5. SonarQube Analysis (선택사항)
|
|
└─> 각 서비스별 테스트 및 코드 품질 분석
|
|
|
|
6. Archive Artifacts
|
|
└─> 생성된 JAR 파일을 Jenkins에 보관
|
|
|
|
7. Docker Build & Push
|
|
└─> 각 서비스별 Docker 이미지 빌드 및 ACR에 푸시
|
|
|
|
8. Update Manifest Repository
|
|
└─> hgzero-manifest 저장소의 Kustomize 파일 업데이트
|
|
└─> ArgoCD가 자동으로 배포 감지
|
|
```
|
|
|
|
## 빌드 결과 확인
|
|
|
|
### 성공 시
|
|
- Console Output에 "✅ Pipeline completed successfully!" 메시지 표시
|
|
- Environment와 Image Tag 정보 출력
|
|
- Manifest 저장소가 업데이트됨
|
|
- ArgoCD가 자동으로 새 이미지를 배포
|
|
|
|
### 실패 시
|
|
- Console Output에 "❌ Pipeline failed!" 메시지 표시
|
|
- 실패한 Stage와 에러 메시지 확인
|
|
- Workspace가 자동으로 정리됨
|
|
|
|
## 환경별 설정
|
|
|
|
### Dev 환경
|
|
```bash
|
|
ENVIRONMENT: dev
|
|
```
|
|
- 개발 환경에 배포
|
|
- 빠른 반복 개발용
|
|
|
|
### Staging 환경
|
|
```bash
|
|
ENVIRONMENT: staging
|
|
```
|
|
- 스테이징 환경에 배포
|
|
- 프로덕션 배포 전 최종 검증
|
|
|
|
### Production 환경
|
|
```bash
|
|
ENVIRONMENT: prod
|
|
```
|
|
- 프로덕션 환경에 배포
|
|
- **주의**: 프로덕션 배포는 신중하게 진행
|
|
|
|
## 트러블슈팅
|
|
|
|
### 문제 1: Gradle 빌드 실패
|
|
**증상**: `./gradlew build` 실패
|
|
|
|
**해결방법**:
|
|
- Console Output에서 에러 로그 확인
|
|
- Java 버전이 21인지 확인
|
|
- Gradle wrapper 권한 확인: `chmod +x gradlew`
|
|
|
|
### 문제 2: Docker 로그인 실패
|
|
**증상**: Docker login 실패
|
|
|
|
**해결방법**:
|
|
- Jenkins Credentials에 ACR credentials가 올바르게 설정되었는지 확인
|
|
- Azure Container Registry URL이 `acrdigitalgarage02.azurecr.io`인지 확인
|
|
- Credential ID가 정확히 `acr-credentials`인지 확인
|
|
|
|
### 문제 3: Git clone 실패 (Manifest Repository)
|
|
**증상**: hgzero-manifest 저장소 clone 실패
|
|
|
|
**해결방법**:
|
|
- GitHub Personal Access Token이 유효한지 확인
|
|
- Token에 `repo` 권한이 있는지 확인
|
|
- Credential ID가 정확히 `git-credentials`인지 확인
|
|
|
|
### 문제 4: Kustomize 설치 실패
|
|
**증상**: Kustomize 다운로드 실패
|
|
|
|
**해결방법**:
|
|
- Jenkins 서버에서 인터넷 연결 확인
|
|
- curl 명령어가 사용 가능한지 확인
|
|
- 필요시 Kustomize를 미리 설치하고 PATH에 추가
|
|
|
|
## 보안 고려사항
|
|
|
|
1. **Credentials 관리**
|
|
- 모든 비밀번호와 토큰은 Jenkins Credentials로 관리
|
|
- Pipeline 코드에 절대 하드코딩하지 않음
|
|
|
|
2. **Git Credentials**
|
|
- Personal Access Token 사용 (비밀번호 사용 금지)
|
|
- 최소 권한 원칙 적용
|
|
|
|
3. **Docker Registry**
|
|
- ACR 접근은 Service Principal 또는 관리되는 자격 증명 사용 권장
|
|
|
|
## 추가 참고사항
|
|
|
|
### Webhook 설정 (선택사항)
|
|
GitHub push 이벤트 시 자동으로 빌드를 트리거하려면:
|
|
|
|
1. Jenkins Job → Configure → Build Triggers
|
|
2. "GitHub hook trigger for GITScm polling" 체크
|
|
3. GitHub 저장소 → Settings → Webhooks
|
|
4. Jenkins URL 추가: `http://{jenkins-url}/github-webhook/`
|
|
|
|
### 알림 설정 (선택사항)
|
|
빌드 결과를 이메일이나 Slack으로 받으려면:
|
|
|
|
- Email: Email Extension Plugin 설치 및 설정
|
|
- Slack: Slack Notification Plugin 설치 및 설정
|
|
|
|
## 지원 서비스
|
|
|
|
현재 Pipeline에서 빌드하는 서비스:
|
|
- `user`: 사용자 관리 서비스
|
|
- `meeting`: 회의 관리 서비스
|
|
- `stt`: 음성-텍스트 변환 서비스
|
|
- `ai`: AI 처리 서비스
|
|
- `notification`: 알림 서비스
|
|
|
|
## 관련 파일
|
|
|
|
- `Jenkinsfile`: Pipeline 정의 파일
|
|
- `.github/config/deploy_env_vars_{환경}`: 환경별 변수 파일
|
|
- `deployment/container/Dockerfile-backend`: 백엔드 Dockerfile
|
|
- `hgzero-manifest` 저장소: Kubernetes 매니페스트 파일
|
|
|
|
## 문의
|
|
|
|
Pipeline 관련 문제가 발생하면 Jenkins Console Output을 확인하고, 필요시 DevOps 팀에 문의하세요.
|