// Jenkins Job:gateway-k8s | Script Path: docs/jenkins/produ/gateway/Jenkinsfile def k8s = load 'docs/jenkins/produ/_shared/k8s-produ-lib.groovy' def SVC = [ prodDir: 'second', module: 'alien-second', serverPort: '50015', withLib: false, deployName: 'second', ] pipeline { agent any options { buildDiscarder(logRotator(numToKeepStr: '15')) timestamps() timeout(time: 90, unit: 'MINUTES') } parameters { string(name: 'GIT_BRANCH', defaultValue: 'uat-20260202', trim: true) string(name: 'IMAGE_TAG', defaultValue: '', trim: true) choice(name: 'DEPLOY_STRATEGY', choices: ['rolling', 'canary']) string(name: 'CANARY_WEIGHT', defaultValue: '10', trim: true) string(name: 'HARBOR_REGISTRY', defaultValue: '39.106.135.88', trim: true) string(name: 'HARBOR_PROJECT', defaultValue: 'alien_cloud', trim: true) string(name: 'BASE_IMAGE', defaultValue: '39.106.135.88/alien_cloud/base/openjdk8-ffmpeg:v1', trim: true) string(name: 'K8S_NAMESPACE', defaultValue: 'alien-produ', trim: true) booleanParam(name: 'SKIP_MAVEN', defaultValue: false) booleanParam(name: 'DRY_RUN', defaultValue: false) } environment { MAVEN_HOME = tool '3.6.3' PATH = "${MAVEN_HOME}/bin:${env.PATH}" GIT_URL = 'http://8.152.195.41:3000/alien/alien_cloud' GIT_CREDENTIALS = 'zhanghaomimapingzheng' HARBOR_CREDENTIALS = 'harbor-robot-alien' KUBECONFIG_CREDENTIALS = 'ack-kubeconfig-alien' } stages { stage('Checkout') { steps { script { def branch = (params.GIT_BRANCH ?: 'uat-20260202').trim() k8s.checkoutBranch(this, branch, env.GIT_URL, env.GIT_CREDENTIALS) } } } stage('Maven Package') { when { expression { return !params.SKIP_MAVEN } } steps { script { k8s.mavenPackageModule(this, SVC.module) } } } stage('Docker Build & Push') { steps { script { def tag = (params.IMAGE_TAG ?: '').trim() ?: "build-${env.BUILD_NUMBER}" env.IMAGE_REF = "${params.HARBOR_REGISTRY}/${params.HARBOR_PROJECT}/${SVC.prodDir}:${tag}" if (params.DRY_RUN) { echo "DRY_RUN: ${env.IMAGE_REF}" return } k8s.dockerBuildAndPush(this, SVC + [ harborRegistry: params.HARBOR_REGISTRY, harborProject: params.HARBOR_PROJECT, baseImage: params.BASE_IMAGE, imageRef: env.IMAGE_REF, harborCredentialsId: env.HARBOR_CREDENTIALS, ]) } } } stage('Deploy to ACK') { steps { script { if (params.DRY_RUN) { return } k8s.deployToAck(this, [ k8sNamespace: params.K8S_NAMESPACE, imageRef: env.IMAGE_REF, deployStrategy: params.DEPLOY_STRATEGY, deploymentStable: SVC.deployName, deploymentCanary: "${SVC.deployName}-canary", ingressCanary: "${SVC.deployName}-canary", canaryWeight: (params.CANARY_WEIGHT ?: '10').trim(), kubeCredentialsId: env.KUBECONFIG_CREDENTIALS, ]) } } } } post { success { echo ">>> ${SVC.prodDir} -> ${env.IMAGE_REF ?: 'dry-run'}" } } }