- itsm/ -> workspace/guardia-itsm/ - manager/ -> workspace/guardia-manager/ - app/ -> workspace/guardia-messenger/ - manual/ -> workspace/guardia-docs/ workspace/zioinfo-web/ unchanged. git mv preserves full commit history. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
92 lines
3.0 KiB
Groovy
92 lines
3.0 KiB
Groovy
pipeline {
|
|
agent any
|
|
|
|
environment {
|
|
APP_DIR = '/opt/guardia/app'
|
|
VENV = '/opt/guardia/venv'
|
|
SERVICE = 'guardia'
|
|
GITEA_URL = 'http://localhost:3000/zio/guardia-itsm.git'
|
|
}
|
|
|
|
options {
|
|
buildDiscarder(logRotator(numToKeepStr: '5'))
|
|
timeout(time: 15, unit: 'MINUTES')
|
|
}
|
|
|
|
stages {
|
|
stage('Checkout') {
|
|
steps {
|
|
echo "체크아웃: ${env.GIT_BRANCH ?: 'main'}"
|
|
checkout scm
|
|
}
|
|
}
|
|
|
|
stage('Python Lint') {
|
|
steps {
|
|
sh '''
|
|
echo "=== Python 문법 검사 ==="
|
|
python3 -m py_compile main.py models.py database.py
|
|
find routers/ -name "*.py" -exec python3 -m py_compile {} \\;
|
|
find core/ -name "*.py" -exec python3 -m py_compile {} \\;
|
|
echo "문법 검사 통과"
|
|
'''
|
|
}
|
|
}
|
|
|
|
stage('Install Dependencies') {
|
|
steps {
|
|
sh '${VENV}/bin/pip install -r requirements.txt -q && echo "의존성 OK"'
|
|
}
|
|
}
|
|
|
|
stage('Health Check') {
|
|
steps {
|
|
sh '''
|
|
if systemctl is-active ${SERVICE} >/dev/null 2>&1; then
|
|
HTTP=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8001/docs)
|
|
echo "현재 서비스 HTTP: $HTTP"
|
|
else
|
|
echo "서비스 미실행"
|
|
fi
|
|
'''
|
|
}
|
|
}
|
|
|
|
stage('Deploy') {
|
|
when { branch 'main' }
|
|
steps {
|
|
sh '''
|
|
echo "=== GUARDiA ITSM 배포 ==="
|
|
# 백업
|
|
BACKUP=/opt/guardia/backups/$(date +%Y%m%d_%H%M%S)
|
|
mkdir -p $BACKUP
|
|
cp -r ${APP_DIR}/*.py ${APP_DIR}/routers ${APP_DIR}/core $BACKUP/ 2>/dev/null || true
|
|
|
|
# 파일 복사
|
|
rsync -av --exclude="__pycache__" --exclude="test_*.py" \\
|
|
--exclude="*.db" --exclude=".git" \\
|
|
./ ${APP_DIR}/
|
|
|
|
# 패키지 업데이트
|
|
${VENV}/bin/pip install -r requirements.txt -q
|
|
|
|
# 서비스 재시작
|
|
systemctl restart ${SERVICE}
|
|
sleep 5
|
|
|
|
# 헬스체크
|
|
HTTP=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8001/docs)
|
|
echo "배포 후 HTTP: $HTTP"
|
|
[ "$HTTP" = "200" ] && echo "배포 성공" || (echo "배포 실패"; exit 1)
|
|
'''
|
|
}
|
|
}
|
|
}
|
|
|
|
post {
|
|
success { echo "✅ GUARDiA 배포 성공: ${currentBuild.displayName}" }
|
|
failure { echo "❌ GUARDiA 배포 실패: ${currentBuild.displayName}" }
|
|
always { cleanWs(cleanWhenNotBuilt: false, cleanWhenSuccess: false) }
|
|
}
|
|
}
|