// 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 가 수행' }
    }
}
