Jenkinsfile 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. // Jenkins Job:gateway-k8s | Script Path: docs/jenkins/produ/gateway/Jenkinsfile
  2. def k8s = load 'docs/jenkins/produ/_shared/k8s-produ-lib.groovy'
  3. def SVC = [
  4. prodDir: 'second',
  5. module: 'alien-second',
  6. serverPort: '50015',
  7. withLib: false,
  8. deployName: 'second',
  9. ]
  10. pipeline {
  11. agent any
  12. options {
  13. buildDiscarder(logRotator(numToKeepStr: '15'))
  14. timestamps()
  15. timeout(time: 90, unit: 'MINUTES')
  16. }
  17. parameters {
  18. string(name: 'GIT_BRANCH', defaultValue: 'uat-20260202', trim: true)
  19. string(name: 'IMAGE_TAG', defaultValue: '', trim: true)
  20. choice(name: 'DEPLOY_STRATEGY', choices: ['rolling', 'canary'])
  21. string(name: 'CANARY_WEIGHT', defaultValue: '10', trim: true)
  22. string(name: 'HARBOR_REGISTRY', defaultValue: '39.106.135.88', trim: true)
  23. string(name: 'HARBOR_PROJECT', defaultValue: 'alien_cloud', trim: true)
  24. string(name: 'BASE_IMAGE', defaultValue: '39.106.135.88/alien_cloud/base/openjdk8-ffmpeg:v1', trim: true)
  25. string(name: 'K8S_NAMESPACE', defaultValue: 'alien-produ', trim: true)
  26. booleanParam(name: 'SKIP_MAVEN', defaultValue: false)
  27. booleanParam(name: 'DRY_RUN', defaultValue: false)
  28. }
  29. environment {
  30. MAVEN_HOME = tool '3.6.3'
  31. PATH = "${MAVEN_HOME}/bin:${env.PATH}"
  32. GIT_URL = 'http://8.152.195.41:3000/alien/alien_cloud'
  33. GIT_CREDENTIALS = 'zhanghaomimapingzheng'
  34. HARBOR_CREDENTIALS = 'harbor-robot-alien'
  35. KUBECONFIG_CREDENTIALS = 'ack-kubeconfig-alien'
  36. }
  37. stages {
  38. stage('Checkout') {
  39. steps {
  40. script {
  41. def branch = (params.GIT_BRANCH ?: 'uat-20260202').trim()
  42. k8s.checkoutBranch(this, branch, env.GIT_URL, env.GIT_CREDENTIALS)
  43. }
  44. }
  45. }
  46. stage('Maven Package') {
  47. when { expression { return !params.SKIP_MAVEN } }
  48. steps {
  49. script { k8s.mavenPackageModule(this, SVC.module) }
  50. }
  51. }
  52. stage('Docker Build & Push') {
  53. steps {
  54. script {
  55. def tag = (params.IMAGE_TAG ?: '').trim() ?: "build-${env.BUILD_NUMBER}"
  56. env.IMAGE_REF = "${params.HARBOR_REGISTRY}/${params.HARBOR_PROJECT}/${SVC.prodDir}:${tag}"
  57. if (params.DRY_RUN) {
  58. echo "DRY_RUN: ${env.IMAGE_REF}"
  59. return
  60. }
  61. k8s.dockerBuildAndPush(this, SVC + [
  62. harborRegistry: params.HARBOR_REGISTRY,
  63. harborProject: params.HARBOR_PROJECT,
  64. baseImage: params.BASE_IMAGE,
  65. imageRef: env.IMAGE_REF,
  66. harborCredentialsId: env.HARBOR_CREDENTIALS,
  67. ])
  68. }
  69. }
  70. }
  71. stage('Deploy to ACK') {
  72. steps {
  73. script {
  74. if (params.DRY_RUN) { return }
  75. k8s.deployToAck(this, [
  76. k8sNamespace: params.K8S_NAMESPACE,
  77. imageRef: env.IMAGE_REF,
  78. deployStrategy: params.DEPLOY_STRATEGY,
  79. deploymentStable: SVC.deployName,
  80. deploymentCanary: "${SVC.deployName}-canary",
  81. ingressCanary: "${SVC.deployName}-canary",
  82. canaryWeight: (params.CANARY_WEIGHT ?: '10').trim(),
  83. kubeCredentialsId: env.KUBECONFIG_CREDENTIALS,
  84. ])
  85. }
  86. }
  87. }
  88. }
  89. post {
  90. success { echo ">>> ${SVC.prodDir} -> ${env.IMAGE_REF ?: 'dry-run'}" }
  91. }
  92. }