|
@@ -0,0 +1,95 @@
|
|
|
|
|
+// 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: 'store-platform',
|
|
|
|
|
+ module: 'alien-store-platform',
|
|
|
|
|
+ serverPort: '50016',
|
|
|
|
|
+ withLib: false,
|
|
|
|
|
+ deployName: 'store-platform',
|
|
|
|
|
+]
|
|
|
|
|
+
|
|
|
|
|
+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', trim: true)
|
|
|
|
|
+ string(name: 'BASE_IMAGE', defaultValue: '39.106.135.88/alien/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'}" }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|