pipeline { agent any environment { REGISTRY = 'gitea.plpark.ectech.co.kr' IMAGE_NAME = "${REGISTRY}/plpark/crossword" IMAGE_TAG = "${env.BUILD_NUMBER}" NAMESPACE = 'plpark-int-ns' } options { buildDiscarder(logRotator(numToKeepStr: '20')) } stages { stage('Checkout') { steps { git branch: 'main', url: 'https://gitea.plpark.ectech.co.kr/plpark/crossword.git', credentialsId: 'gitea-registry' } } stage('Build & Push Image') { steps { withEnv(["PATH+DOCKER=/dockerbin"]) { withCredentials([usernamePassword( credentialsId: 'gitea-registry', usernameVariable: 'REG_USER', passwordVariable: 'REG_PASS')]) { sh ''' set -e echo "$REG_PASS" | docker login "$REGISTRY" -u "$REG_USER" --password-stdin docker build -t "$IMAGE_NAME:$IMAGE_TAG" -t "$IMAGE_NAME:latest" . docker push "$IMAGE_NAME:$IMAGE_TAG" docker push "$IMAGE_NAME:latest" ''' } } } } stage('Deploy to Rancher') { steps { withEnv(["PATH+DOCKER=/dockerbin"]) { withCredentials([file(credentialsId: 'rancher-kubeconfig', variable: 'KUBECONFIG_FILE')]) { sh ''' set -e export KUBECONFIG="$KUBECONFIG_FILE" sed "s|__IMAGE__|$IMAGE_NAME:$IMAGE_TAG|g" k8s/deployment.yaml > /tmp/crossword-deploy.yaml kubectl apply -f /tmp/crossword-deploy.yaml kubectl -n "$NAMESPACE" rollout status deployment/crossword --timeout=180s ''' } } } } } post { success { echo "Deployed ${IMAGE_NAME}:${IMAGE_TAG} -> http://192.168.0.216:31380 (https://crossword.plpark.ectech.co.kr)" } always { sh 'rm -f /tmp/crossword-deploy.yaml || true' } } }