증상: push 후 프론트만 배포, 백엔드 jar 스테일(V6 고정, V7/V8 미적용). 근본원인 3종: 1) deploy_kintex.sh가 백엔드 빌드 안 함(복사만) → 이제 프론트+백엔드 직접 빌드(단일 진실원) 2) gradlew mode 100644(비실행) → git +x(100755) + sh ./gradlew(실행권한 불요) 3) jar 검증 'unzip -l | grep -q'가 set -o pipefail 하에서 grep 조기종료→unzip SIGPIPE(141) →메인클래스 발견에도 오탐 실패→die→jar 미복사. → grep -q 제거(전량 소비) + 선택 tail(파이프 조기종료 회피) - deploy_server kintex 블록: npm/gradle/verify 개별단계 제거 → git pull → deploy_kintex.sh(빌드+배포) → health - Jenkinsfile: 동일 스크립트 위임(경로 함정 회피, WORKSPACE 일치) - 서버 /opt/zioinfo/deploy_server.py 반영·재시작 완료(백업) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
49 lines
2.2 KiB
Groovy
49 lines
2.2 KiB
Groovy
// KINTEX 자동전시시스템 — CI/CD 파이프라인 (git push → Gitea webhook → 빌드 → 배포 → 헬스체크)
|
|
// 실행 노드: 서버(101.79.17.164) Jenkins. 프론트(vite)→/var/www/kintex, 백엔드(bootJar)→/opt/kintex/app/app.jar,
|
|
// kintex.service + kintex-nanobanana.service 재기동. 배포 단계는 sudo(deploy_kintex.sh) 위임.
|
|
// ※ 상시 자동배포는 deploy_server.py(webhook, 포트 9999)의 kintex 블록이 1차 경로. 본 파이프라인은 Jenkins 병행 트랙.
|
|
pipeline {
|
|
agent any
|
|
options {
|
|
timeout(time: 40, unit: 'MINUTES')
|
|
timestamps()
|
|
buildDiscarder(logRotator(numToKeepStr: '10'))
|
|
}
|
|
environment {
|
|
WEB_ROOT = '/var/www/kintex'
|
|
APP_JAR = '/opt/kintex/app/app.jar'
|
|
BACKEND_PORT = '8021'
|
|
}
|
|
stages {
|
|
stage('Checkout') {
|
|
steps { checkout scm }
|
|
}
|
|
stage('Build & Deploy') {
|
|
steps {
|
|
// 빌드+배포 단일 진실원 — deploy_kintex.sh 가 프론트(npm)·백엔드(sh ./gradlew bootJar) 빌드→검증→배포.
|
|
// webhook 경로(deploy_server.py)와 동일 스크립트 사용(경로 함정·SIGPIPE 검증 버그 회피).
|
|
// 권한 필요한 배포는 sudo NOPASSWD 권장. 체크아웃 사본을 실행(설치본 스테일 회피).
|
|
sh 'chmod +x "$WORKSPACE/deploy/deploy_kintex.sh"'
|
|
sh 'sudo bash "$WORKSPACE/deploy/deploy_kintex.sh" "$WORKSPACE"'
|
|
}
|
|
}
|
|
stage('Health Check') {
|
|
steps {
|
|
sh '''
|
|
for i in $(seq 1 15); do
|
|
code=$(curl -s -m 6 -o /dev/null -w '%{http_code}' http://127.0.0.1:'"$BACKEND_PORT"'/health || true)
|
|
echo "health try $i: $code"
|
|
if [ "$code" = "200" ]; then exit 0; fi
|
|
sleep 5
|
|
done
|
|
echo "health check failed"; systemctl is-active kintex.service || true; exit 1
|
|
'''
|
|
}
|
|
}
|
|
}
|
|
post {
|
|
success { echo 'KINTEX 배포 성공 (kintex.zioinfo.co.kr, 백엔드 8021)' }
|
|
failure { echo 'KINTEX 빌드/배포 실패 — 롤백은 deploy_kintex.sh 가 수행' }
|
|
}
|
|
}
|