Files

72 lines
2.2 KiB
Groovy
Raw Permalink Normal View History

pipeline {
agent any
options {
timestamps()
buildDiscarder(logRotator(numToKeepStr: '20'))
timeout(time: 15, unit: 'MINUTES')
}
environment {
PROD_DIR = '/home/kyu/trading-prod'
// Phase 1: project name 분리. running stack(trading-ai)과 충돌 방지.
COMPOSE_PROJECT_NAME = 'trading-prod'
HOME = '/home/kyu'
}
stages {
stage('Checkout info') {
steps {
script {
echo "Branch: ${env.BRANCH_NAME ?: 'n/a'}"
echo "Commit: ${env.GIT_COMMIT ?: 'n/a'}"
echo "Build : #${env.BUILD_NUMBER} on ${env.NODE_NAME}"
}
sh 'git log -1 --pretty=fuller || true'
}
}
stage('Sync to PROD_DIR') {
steps {
sh '''
set -e
echo "Syncing latest main to ${PROD_DIR}"
cd "${PROD_DIR}"
git fetch --all --prune
git reset --hard origin/main
git clean -fdx -e .env -e qdrant-config/config.yaml
echo "--- after sync ---"
git log -1 --oneline
'''
}
}
stage('Validate compose (no deploy)') {
steps {
sh '''
set -e
cd "${PROD_DIR}"
echo "=== docker compose config (project: ${COMPOSE_PROJECT_NAME}) ==="
docker compose config --quiet
echo "OK: compose config valid"
echo
echo "=== compose ps (project ${COMPOSE_PROJECT_NAME} containers, if any) ==="
docker compose ps || true
'''
}
}
// Phase 2 (나중 활성화): 실제 배포 stage
// stage('Deploy') {
// steps {
// sh 'cd "${PROD_DIR}" && docker compose up -d --remove-orphans'
// }
// }
}
post {
success { echo "Phase 1 SUCCESS — PROD_DIR synced & validated. No containers touched." }
failure { echo "FAILED — check logs" }
}
}