You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
3.2 KiB
104 lines
3.2 KiB
// PAL Networks 홈페이지 (pal-hom-2026) CI/CD 파이프라인 |
|
// 빌드: npm ci -> npm run build (결과물: docs/) |
|
// 배포: docs/ 정적 파일을 웹서버로 전달 (아래 Deploy 스테이지에서 환경에 맞게 설정) |
|
|
|
pipeline { |
|
agent any |
|
|
|
// Jenkins > Manage Jenkins > Tools > NodeJS 에 'node24' 라는 이름으로 |
|
// Node 24.16.0(.node-version과 동일)을 등록해 두어야 함. |
|
// (대안: agent { docker { image 'node:24.16.0' } } 로 교체 가능) |
|
tools { |
|
nodejs 'node24' |
|
} |
|
|
|
options { |
|
timestamps() |
|
disableConcurrentBuilds() |
|
timeout(time: 15, unit: 'MINUTES') |
|
buildDiscarder(logRotator(numToKeepStr: '20')) |
|
} |
|
|
|
environment { |
|
// 빌드 산출물 디렉터리 (vite.config.js의 outDir와 일치) |
|
BUILD_DIR = 'docs' |
|
// ── 배포 대상 ── 실제 환경에 맞게 수정 ────────────────────────── |
|
DEPLOY_HOST = '3.37.30.218' // 배포 대상 서버 IP (또는 호스트명) |
|
DEPLOY_USER = 'ec2-user' // SSH 접속 계정 (Amazon Linux 2) |
|
DEPLOY_PATH = '/data/app/hom' // 서버 내 배포 경로 (nginx root) |
|
DEPLOY_SSH_CRED = 'pal-hom-ssh' // Jenkins 크리덴셜 ID (EC2 pem 키) |
|
// ──────────────────────────────────────────────────────────── |
|
} |
|
|
|
stages { |
|
stage('Checkout') { |
|
steps { |
|
checkout scm |
|
} |
|
} |
|
|
|
stage('Environment') { |
|
steps { |
|
sh ''' |
|
echo "Node: $(node -v)" |
|
echo "npm: $(npm -v)" |
|
''' |
|
} |
|
} |
|
|
|
stage('Install') { |
|
steps { |
|
// lockfile 기반 클린 설치 (재현성 보장) |
|
sh 'npm ci' |
|
} |
|
} |
|
|
|
stage('Lint') { |
|
steps { |
|
sh 'npm run lint' |
|
} |
|
} |
|
|
|
stage('Build') { |
|
steps { |
|
sh 'npm run build' |
|
} |
|
} |
|
|
|
stage('Deploy') { |
|
steps { |
|
// [방식 B] 원격 웹서버로 SSH/rsync 배포 |
|
// - SSH Agent Plugin 설치 필요 |
|
// - DEPLOY_SSH_CRED 에 해당 서버 접속용 SSH 개인키를 등록해 둘 것 |
|
// - 최초 1회 known_hosts 등록을 위해 StrictHostKeyChecking=no 사용 |
|
sshagent([env.DEPLOY_SSH_CRED]) { |
|
sh ''' |
|
rsync -avz --delete \ |
|
-e "ssh -o StrictHostKeyChecking=no" \ |
|
"${BUILD_DIR}/" \ |
|
"${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/" |
|
''' |
|
} |
|
echo "Deployed ${BUILD_DIR}/ -> ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}" |
|
|
|
// [방식 A] Jenkins와 같은 서버에 배포한다면 위 sshagent 블록 대신: |
|
// sh 'mkdir -p "${DEPLOY_PATH}" && rsync -av --delete "${BUILD_DIR}/" "${DEPLOY_PATH}/"' |
|
|
|
// [방식 C] 산출물 아카이브만 보관(외부 배포 도구가 수거): |
|
// archiveArtifacts artifacts: "${BUILD_DIR}/**", fingerprint: true |
|
} |
|
} |
|
} |
|
|
|
post { |
|
success { |
|
echo "✅ 빌드/배포 성공: ${env.JOB_NAME} #${env.BUILD_NUMBER}" |
|
} |
|
failure { |
|
echo "❌ 빌드/배포 실패: ${env.JOB_NAME} #${env.BUILD_NUMBER}" |
|
} |
|
cleanup { |
|
cleanWs() |
|
} |
|
} |
|
}
|
|
|