엔터프라이즈 Jenkins 파이프라인: WAR를 DEV, QA, UAT, PROD에 배포하고 승인 게이트, 롤백 및 SCP 적용
Source: Dev.to
소개
현대 기업 환경에서는 애플리케이션을 여러 환경(DEV, QA, UAT, PROD)에 수동으로 배포하는 것이 위험하고 오류가 발생하기 쉬우며 비효율적입니다.
조직이 필요로 하는 것
- 자동화된 배포
- 환경별 타깃 지정
- 프로덕션을 위한 승인 게이트
- 백업 및 롤백 기능
- 보안 파일 전송
- 높은 신뢰성 및 감사 가능성
이 문서에서는 다음을 활용하여 WAR 파일을 여러 환경에 배포하는 프로덕션 수준의 Jenkins 파이프라인을 구축합니다:
- 파라미터화된 파이프라인
- SCP 배포
- SSH 보안 인증
- 승인 게이트
- 자동 백업
- 롤백 지원
- Tomcat 재시작
- 배포 검증
이 아키텍처는 실제 기업 환경에서 사용됩니다.
엔터프라이즈 배포 아키텍처
Developer
↓
Git Repository
↓
Jenkins Pipeline
↓
Build WAR File
↓
Select Environment (DEV/QA/UAT/PROD)
↓
Approval Gate (PROD only)
↓
Backup Existing WAR
↓
Deploy WAR using SCP
↓
Restart Tomcat
↓
Health Check Verification
↓
Application Live
Source: …
사전 요구 사항
이 파이프라인을 구현하기 전에 다음 사항을 확인하십시오:
1. Jenkins 설치
필수 플러그인
- Pipeline Plugin
- SSH Agent Plugin
- Credentials Plugin
2. Jenkins에 SSH 자격 증명 추가
경로: Manage Jenkins → Credentials → Global → Add Credentials
- Kind: SSH Username with private key
- ID:
tomcat-key - Username:
ec2-user - Private key: PEM 파일을 붙여넣기
3. 대상 서버에 Tomcat 설치
일반적인 배포 경로:
/opt/tomcat/webapps/
⚙️ 완전한 엔터프라이즈 Jenkins 파이프라인
pipeline {
agent any
tools {
maven 'Maven-3.9'
}
parameters {
choice(
name: 'ENV',
choices: ['DEV', 'QA', 'UAT', 'PROD'],
description: 'Select Deployment Environment'
)
booleanParam(
name: 'ROLLBACK',
defaultValue: false,
description: 'Rollback deployment'
)
}
environment {
DEV_SERVER = "10.0.0.10"
QA_SERVER = "10.0.0.20"
UAT_SERVER = "10.0.0.30"
PROD_SERVER = "10.0.0.40"
USER = "ec2-user"
DEPLOY_PATH = "/opt/tomcat/webapps/"
BACKUP_PATH = "/opt/tomcat/backup/"
WAR_FILE = "target/myapp.war"
}
stages {
stage('Checkout') {
steps {
git 'https://GitHub.com/sresrinivas/EBusibess.git'
}
}
stage('Build WAR') {
when { expression { params.ROLLBACK == false } }
steps {
sh 'mvn clean package'
}
}
stage('Select Server') {
steps {
script {
if (params.ENV == "DEV") env.SERVER = env.DEV_SERVER
if (params.ENV == "QA") env.SERVER = env.QA_SERVER
if (params.ENV == "UAT") env.SERVER = env.UAT_SERVER
if (params.ENV == "PROD") env.SERVER = env.PROD_SERVER
}
}
}
stage('Approval for PROD') {
when { expression { params.ENV == 'PROD' } }
steps {
input message: "Approve deployment to PROD?", ok: "Deploy"
}
}
stage('Backup WAR') {
steps {
sshagent(['tomcat-key']) {
sh """
ssh -o StrictHostKeyChecking=no ${USER}@${SERVER} '
mkdir -p ${BACKUP_PATH}
cp ${DEPLOY_PATH}/myapp.war ${BACKUP_PATH}/myapp-${BUILD_NUMBER}.war || true
'
"""
}
}
}
stage('Deploy WAR') {
when { expression { params.ROLLBACK == false } }
steps {
sshagent(['tomcat-key']) {
sh """
scp -o StrictHostKeyChecking=no \
${WAR_FILE} \
${USER}@${SERVER}:${DEPLOY_PATH}
"""
}
}
}
stage('Rollback WAR') {
when { expression { params.ROLLBACK == true } }
steps {
sshagent(['tomcat-key']) {
sh """
ssh -o StrictHostKeyChecking=no ${USER}@${SERVER} '
cp ${BACKUP_PATH}/myapp-${BUILD_NUMBER}.war ${DEPLOY_PATH}/myapp.war
'
"""
}
}
}
stage('Restart Tomcat') {
steps {
sshagent(['tomcat-key']) {
sh """
ssh -o StrictHostKeyChecking=no ${USER}@${SERVER} '
systemctl restart tomcat
'
"""
}
}
}
stage('Health Check') {
steps {
sh """
curl -I http://${SERVER}:8080/myapp || true
"""
}
}
}
}
롤백 메커니즘
배포가 실패하면, ROLLBACK = true 로 파이프라인을 다시 실행하면 됩니다. 파이프라인이 이전 WAR 파일을 자동으로 복원합니다.
Production Safety Mechanisms
- Manual approval for PROD deployments → PROD 배포에 대한 수동 승인
- Backup before deployment → 배포 전 백업
- Secure SSH authentication (via Jenkins credentials) → 보안 SSH 인증 (Jenkins 자격 증명 사용)
- Health‑check verification after restart → 재시작 후 헬스 체크 검증
주요 엔터프라이즈 기능
- Parameterized environment selection
- Secure SSH/SCP transfers
- Automated backup & rollback
- Manual approval gate for production
- Tomcat service management
- Post‑deployment health verification
Jenkins 엔터프라이즈 배포 파이프라인
특징
✔ 다중 환경 배포
파이프라인은 단일 Jenkins 작업으로 DEV, QA, UAT, PROD에 원활하게 배포할 수 있습니다. 엔지니어는 런타임에 대상 환경을 동적으로 선택할 수 있습니다.
✔ SCP 및 SSH를 이용한 보안 배포
WAR 파일은 SSH 키 인증을 사용한 SCP를 통해 안전하게 전송되어 Jenkins와 대상 서버 간의 암호화된 통신을 보장합니다.
✔ 프로덕션 승인 게이트
프로덕션 배포 전에는 수동 승인 단계가 필요하여 실수로 인한 릴리스를 방지하고 통제된 롤아웃을 강제합니다.
✔ 배포 전 자동 백업
파이프라인은 현재 배포된 WAR 파일을 자동으로 백업하여 복구를 위한 안정적인 버전을 항상 사용할 수 있게 합니다.
✔ 즉시 롤백 기능
배포가 실패하거나 문제가 발생하면 파이프라인은 백업에서 이전 버전을 즉시 복원하여 다운타임과 위험을 최소화합니다.
✔ 완전 자동화 배포 워크플로우
빌드 → 배포 → 서비스 재시작 → 검증까지 전체 과정이 자동화되어 수동 개입과 인적 오류를 줄입니다.
✔ 보안 자격 증명 관리
모든 SSH 키와 자격 증명은 Jenkins Credentials Manager에 안전하게 저장되어 엔터프라이즈 수준의 보안을 제공합니다.
✔ 배포 검증 및 헬스 체크
배포 후 자동 헬스 체크를 통해 애플리케이션 가용성을 확인하고 성공적인 릴리스를 검증합니다.
실제 엔터프라이즈 혜택
✔ 수동 배포 위험 제거
자동화는 수동 배포에 내재된 오류, 불일치 및 지연을 제거합니다.
✔ 배포 속도 및 효율성 향상
이전에는 수동으로 30~60분이 걸리던 작업이 이제는 몇 분 안에 완료됩니다.
✔ 프로덕션 안전 및 안정성 보장
승인 게이트, 백업 및 롤백 메커니즘이 프로덕션 환경을 안전하게 유지합니다.
✔ 더 빠른 릴리즈 사이클 가능
팀은 기능, 수정 및 업데이트를 빠르게 제공하여 애자일 및 DevOps 실천을 지원합니다.
✔ 완전한 추적성 및 감사 가능성 제공
모든 배포가 Jenkins에 기록되어 컴플라이언스를 위한 완전한 추적성을 제공합니다.
✔ 다운타임 감소 및 신뢰성 향상
자동 롤백 및 헬스 체크가 애플리케이션의 높은 가용성을 유지합니다.
✔ DevOps 자동화 성숙도 향상
이 파이프라인은 은행, 핀테크, 헬스케어 및 대규모 클라우드 환경에서 사용되는 엔터프라이즈 수준의 관행을 반영합니다.
✔ 확장 가능하고 미래 지향적인 아키텍처 지원
Kubernetes, 클라우드 배포, 블루‑그린 전략 및 GitOps 워크플로우로 손쉽게 확장할 수 있습니다.
향후 개선 사항
파이프라인을 다음과 같이 확장할 수 있습니다:
- 블루‑그린 배포
- 카나리 배포
- Kubernetes 배포
- 헬스 체크 실패 시 자동 롤백
- Slack(또는 기타) 알림
- GitOps 통합
결론
이 Jenkins 파이프라인은 다음과 같은 완전한 엔터프라이즈 급 배포 솔루션을 제공합니다:
- 다중 환경 배포
- 보안 SCP 전송
- 프로덕션 승인 게이트
- 자동 백업 및 즉시 롤백
- 완전 자동화 워크플로우
이는 전 세계 DevOps 팀이 채택한 실제 프로덕션 배포 패턴을 나타냅니다.
