pipeline { agent any parameters { choice(name: 'env', choices: ['dev', 'test', 'prod'], description: '部署环境(dev/test/prod)') string(name: 'NAMESPACE', defaultValue: 'hfln-dev', description: 'Kubernetes 命名空间') } environment { PROJECT_NAME = 'gateway-service' MODULE_NAME = 'gateway-service-server' MAVEN_HOME = '/usr/local/apache-maven-3.9.9/bin' HARBOR_HOST = '8.130.28.21:81' KUBECONFIG_PATH = '/root/.kube/config' SPRING_PROFILES_ACTIVE = "${params.env}" } stages { stage('🧬 拉取 Git 代码') { steps { script { echo ">>> 正在拉取 Git 代码..." checkout scm echo ">>> 拉取完成 ✅" } } } stage('📦 Maven 构建项目') { steps { script { echo ">>> 开始构建模块 ${MODULE_NAME}" sh "${MAVEN_HOME}/mvn clean package -DskipTests" echo ">>> 构建完成 ✅" } } } stage('🐳 构建并推送 Docker 镜像') { steps { script { def imageTag = "${HARBOR_HOST}/${params.env}/${PROJECT_NAME}:${BUILD_NUMBER}" echo ">>> 构建 Docker 镜像: ${imageTag}" sh """ docker login -u admin -p Hfln@1024 ${HARBOR_HOST} docker build --build-arg env=${params.env} -t ${imageTag} . docker push ${imageTag} docker rmi ${imageTag} """ echo ">>> 镜像推送完成 ✅" } } } stage('🚀 部署到 Kubernetes') { steps { script { def imageTag = "${HARBOR_HOST}/${params.env}/${PROJECT_NAME}:${BUILD_NUMBER}" echo ">>> 部署到 Kubernetes,命名空间:${params.NAMESPACE}" sh """ export KUBECONFIG=${KUBECONFIG_PATH} kubectl set image deployment/${PROJECT_NAME} ${PROJECT_NAME}=${imageTag} -n ${params.NAMESPACE} """ echo ">>> 部署完成 ✅" } } } } post { success { script { echo "✅ 构建 & 部署成功 🎉" // 清理本地旧镜像(仅保留最新3个) sh """ docker images --format '{{.Repository}}:{{.Tag}} {{.CreatedAt}}' | \ grep '${HARBOR_HOST}/${params.env}/${PROJECT_NAME}:' | \ sort -rk2 | \ tail -n +4 | \ awk '{print \$1}' | \ xargs -r docker rmi || true """ } } failure { echo "❌ 构建或部署失败,请检查日志。" } always { echo "🧼 清理 Jenkins 工作目录..." cleanWs() } } }