jenkinsfile

This commit is contained in:
2026-02-09 10:37:35 +09:00
parent 596b6d4d84
commit dee09ad16a
2 changed files with 150 additions and 9 deletions

View File

@@ -1,12 +1,22 @@
pipeline {
agent any
parameters {
string(name: 'SPRING_PROFILES_ACTIVE', defaultValue: 'prod', description: 'Spring Profile (dev/prod)')
string(name: 'BATCH_DATE', defaultValue: '', description: 'Batch Date (YYYY-MM-DD, empty = today)')
string(name: 'ADDITIONAL_PARAMS', defaultValue: '', description: 'Additional Parameters (e.g., limit=100)')
choice(name: 'ACTION', choices: ['RUN', 'VERIFY_ONLY'], description: 'Action to perform')
}
tools {
jdk 'jdk21'
}
environment {
BRANCH = 'main'
GIT_REPO = 'https://kamco.git.gs.dabeeo.com/MVPTeam/kamco-cd-cron.git'
JAR_NAME = 'generator-dataset-for-training.jar'
TODAY = sh(script: "date +%Y-%m-%d", returnStdout: true).trim()
}
// NOTE: Pre-built JAR is included in the repository
@@ -56,13 +66,49 @@ pipeline {
}
}
stage('Deploy') {
stage('Run JAR') {
when {
expression { params.ACTION == 'RUN' }
}
steps {
dir("kamco-make-dataset-generation") {
script {
def jarPath = "build/libs/${env.JAR_NAME}"
echo "Ready to deploy: ${jarPath}"
// Determine batch date: use parameter if provided, otherwise use today
def batchDate = params.BATCH_DATE ?: env.TODAY
echo "========================================="
echo "Running JAR: ${jarPath}"
echo "Profile: ${params.SPRING_PROFILES_ACTIVE}"
echo "Batch Date: ${batchDate}"
echo "Additional Params: ${params.ADDITIONAL_PARAMS}"
echo "========================================="
// Build Java command
def javaCmd = "java -jar ${jarPath}"
// Add Spring profile
if (params.SPRING_PROFILES_ACTIVE) {
javaCmd += " --spring.profiles.active=${params.SPRING_PROFILES_ACTIVE}"
}
// Add batch date parameter
javaCmd += " date=${batchDate}"
// Add additional parameters
if (params.ADDITIONAL_PARAMS) {
javaCmd += " ${params.ADDITIONAL_PARAMS}"
}
echo "Executing: ${javaCmd}"
// Execute JAR
sh """
${javaCmd}
"""
echo "JAR execution completed successfully"
}
}
}

View File

@@ -57,11 +57,90 @@ git push
### 2. Jenkins 서버 (폐쇄망 환경)
#### Jenkins 파라미터
파이프라인 실행 시 다음 파라미터를 설정할 수 있습니다:
| 파라미터 | 타입 | 기본값 | 설명 |
|---------|------|--------|------|
| SPRING_PROFILES_ACTIVE | String | prod | Spring Profile (dev/prod) |
| BATCH_DATE | String | (공백) | Batch 날짜 (YYYY-MM-DD, 공백 = 오늘) |
| ADDITIONAL_PARAMS | String | (공백) | 추가 파라미터 (예: limit=100) |
| ACTION | Choice | RUN | 실행 모드 (RUN / VERIFY_ONLY) |
#### 실행 예시
**1. 기본 실행 (오늘 날짜)**:
```
ACTION: RUN
SPRING_PROFILES_ACTIVE: prod
BATCH_DATE: (공백) ← 자동으로 오늘 날짜 사용
ADDITIONAL_PARAMS: (공백)
→ java -jar generator-dataset-for-training.jar --spring.profiles.active=prod date=2026-02-09
```
**2. 특정 날짜로 실행**:
```
ACTION: RUN
SPRING_PROFILES_ACTIVE: prod
BATCH_DATE: 2024-01-15
ADDITIONAL_PARAMS: (공백)
→ java -jar generator-dataset-for-training.jar --spring.profiles.active=prod date=2024-01-15
```
**3. 오늘 날짜 + 추가 파라미터**:
```
ACTION: RUN
SPRING_PROFILES_ACTIVE: prod
BATCH_DATE: (공백)
ADDITIONAL_PARAMS: limit=100 debug=true
→ java -jar generator-dataset-for-training.jar --spring.profiles.active=prod date=2026-02-09 limit=100 debug=true
```
**4. 개발 환경 테스트**:
```
ACTION: RUN
SPRING_PROFILES_ACTIVE: dev
BATCH_DATE: 2024-02-01
ADDITIONAL_PARAMS: dryRun=true
→ java -jar generator-dataset-for-training.jar --spring.profiles.active=dev date=2024-02-01 dryRun=true
```
**5. JAR 검증만 (실행 안 함)**:
```
ACTION: VERIFY_ONLY
→ JAR 파일 존재만 확인하고 종료
```
#### 날짜 파라미터 동작 방식
**BATCH_DATE 파라미터**:
- **비어있음 (기본값)**: Jenkins 서버의 현재 날짜 자동 사용 (YYYY-MM-DD)
- **값 입력**: 입력한 날짜 사용 (예: 2024-01-15)
**예시**:
```bash
# BATCH_DATE가 비어있으면
TODAY=$(date +%Y-%m-%d) # 2026-02-09
java -jar app.jar date=2026-02-09
# BATCH_DATE에 2024-01-15 입력하면
java -jar app.jar date=2024-01-15
```
#### Jenkins 파이프라인 단계
Jenkins는 자동으로:
1. Git에서 코드 체크아웃
2. JAR 파일 존재 확인
3. JAR 파일 정보 출력
4. 배포 실행 (Deploy stage에 배포 명령 추가 필요)
1. **Environment 설정**: 오늘 날짜 계산 (TODAY 변수)
2. **Checkout**: Git에서 코드 체크아웃
3. **Verify JAR**: JAR 파일 존재 확인
4. **Run JAR** (ACTION=RUN인 경우만):
- BATCH_DATE가 비어있으면 TODAY 사용
- JAR 실행 with 파라미터
## 파일 구조
@@ -90,14 +169,30 @@ out/
## Jenkinsfile 구조
```groovy
parameters {
string(name: 'SPRING_PROFILES_ACTIVE', defaultValue: 'prod', ...)
string(name: 'BATCH_DATE', defaultValue: '', ...)
string(name: 'ADDITIONAL_PARAMS', defaultValue: '', ...)
choice(name: 'ACTION', choices: ['RUN', 'VERIFY_ONLY'], ...)
}
environment {
TODAY = sh(script: "date +%Y-%m-%d", returnStdout: true).trim()
}
stage('Verify JAR') {
// JAR 파일 존재 확인
// 파일 정보 출력
}
stage('Deploy') {
// 배포 명령 실행
// 예: scp, ssh, kubectl 등
stage('Run JAR') {
when {
expression { params.ACTION == 'RUN' }
}
// 날짜 결정: BATCH_DATE가 비어있으면 TODAY 사용
def batchDate = params.BATCH_DATE ?: env.TODAY
// JAR 실행
// java -jar generator-dataset-for-training.jar --spring.profiles.active=prod date=${batchDate} ${ADDITIONAL_PARAMS}
}
```