136 lines
5.2 KiB
Plaintext
136 lines
5.2 KiB
Plaintext
pipeline {
|
|
agent {
|
|
kubernetes {
|
|
yaml """
|
|
apiVersion: v1
|
|
kind: Pod
|
|
spec:
|
|
containers:
|
|
- name: podman
|
|
image: quay.io/podman/stable:latest
|
|
command:
|
|
- cat
|
|
tty: true
|
|
securityContext:
|
|
privileged: true
|
|
- name: git
|
|
image: alpine/git:latest
|
|
command:
|
|
- cat
|
|
tty: true
|
|
"""
|
|
}
|
|
}
|
|
|
|
environment {
|
|
imageTag = sh(script: "echo ${BUILD_NUMBER}", returnStdout: true).trim()
|
|
}
|
|
|
|
stages {
|
|
stage('Checkout') {
|
|
steps {
|
|
checkout scm
|
|
}
|
|
}
|
|
|
|
stage('Load Deploy Variables') {
|
|
steps {
|
|
script {
|
|
// deploy_env_vars 파일에서 환경변수 로드
|
|
if (fileExists('deploy_env_vars')) {
|
|
def envVars = readFile('deploy_env_vars').trim()
|
|
envVars.split('\n').each { line ->
|
|
if (line.contains('=')) {
|
|
def (key, value) = line.split('=', 2)
|
|
env."${key}" = value
|
|
echo "Loaded: ${key} = ${value}"
|
|
}
|
|
}
|
|
} else {
|
|
error "deploy_env_vars 파일이 없습니다!"
|
|
}
|
|
|
|
// 이미지 경로 설정
|
|
env.imagePath = "${env.REGISTRY}/${env.IMAGE_ORG}/smarketing-frontend:${imageTag}"
|
|
echo "Image Path: ${env.imagePath}"
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Build & Push Image') {
|
|
steps {
|
|
container('podman') {
|
|
script {
|
|
sh """
|
|
podman build \\
|
|
--build-arg PROJECT_FOLDER="." \\
|
|
--build-arg REACT_APP_AUTH_URL="${env.AUTH_URL}" \\
|
|
--build-arg REACT_APP_MEMBER_URL="${env.MEMBER_URL}" \\
|
|
--build-arg REACT_APP_STORE_URL="${env.STORE_URL}" \\
|
|
--build-arg REACT_APP_CONTENT_URL="${env.CONTENT_URL}" \\
|
|
--build-arg REACT_APP_RECOMMEND_URL="${env.RECOMMEND_URL}" \\
|
|
--build-arg BUILD_FOLDER="deployment/container" \\
|
|
--build-arg EXPORT_PORT="${env.EXPORT_PORT}" \\
|
|
-f deployment/container/Dockerfile-smarketing-frontend \\
|
|
-t ${env.imagePath} .
|
|
|
|
podman push ${env.imagePath}
|
|
"""
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Update Manifest Repository') {
|
|
steps {
|
|
container('git') {
|
|
withCredentials([usernamePassword(
|
|
credentialsId: 'github-credentials-${env.TEAMID}',
|
|
usernameVariable: 'GIT_USERNAME',
|
|
passwordVariable: 'GIT_PASSWORD'
|
|
)]) {
|
|
sh """
|
|
# Git 설정
|
|
git config --global user.name "Jenkins"
|
|
git config --global user.email "jenkins@company.com"
|
|
|
|
# Manifest Repository Clone
|
|
git clone https://\$GIT_USERNAME:\$GIT_PASSWORD@github.com/${env.GITHUB_ORG}/smarketing-manifest.git
|
|
cd smarketing-manifest
|
|
|
|
# Frontend 이미지 태그 업데이트
|
|
echo "Updating smarketing-frontend deployment with image tag: ${imageTag}"
|
|
|
|
if [ -f "smarketing-frontend/deployment.yaml" ]; then
|
|
# 기존 이미지 태그를 새 태그로 교체
|
|
sed -i "s|image: ${env.REGISTRY}/${env.IMAGE_ORG}/smarketing-frontend:.*|image: ${env.imagePath}|g" smarketing-frontend/deployment.yaml
|
|
|
|
echo "Updated frontend deployment file:"
|
|
cat smarketing-frontend/deployment.yaml | grep "image:"
|
|
else
|
|
echo "Warning: Frontend deployment file not found"
|
|
fi
|
|
|
|
# 변경사항 커밋 및 푸시
|
|
git add .
|
|
git commit -m "Update smarketing-frontend image tag to ${imageTag}" || echo "No changes to commit"
|
|
git push origin main
|
|
"""
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
post {
|
|
always {
|
|
cleanWs()
|
|
}
|
|
success {
|
|
echo "✅ smarketing-frontend 이미지 빌드 및 Manifest 업데이트가 완료되었습니다!"
|
|
}
|
|
failure {
|
|
echo "❌ smarketing-frontend CI/CD 파이프라인 중 오류가 발생했습니다."
|
|
}
|
|
}
|
|
} |