Jenkinsfile 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /**
  2. * 整体 / 单服务 / 多选 发版(Harbor + ACK)。
  3. *
  4. * Jenkins Job 建议名:alien-cloud-k8s-whole
  5. * Script Path:docs/jenkins/produ/whole/Jenkinsfile
  6. *
  7. * DEPLOY_MODE:whole=七个服务全发;single=选一个;multi=勾选 MULTI_*。
  8. * 与 prod-promote-from-uat 的 whole/single/multi 语义一致,制品改为镜像而非 jar 目录。
  9. */
  10. def k8s = load 'docs/jenkins/produ/_shared/k8s-produ-lib.groovy'
  11. def reg = load 'docs/jenkins/produ/_shared/service-registry.groovy'
  12. pipeline {
  13. agent any
  14. options {
  15. buildDiscarder(logRotator(numToKeepStr: '15'))
  16. timestamps()
  17. timeout(time: 180, unit: 'MINUTES')
  18. }
  19. parameters {
  20. choice(name: 'DEPLOY_MODE', choices: ['whole', 'single', 'multi'],
  21. description: 'whole=全部七个 Java 服务;single=一个;multi=勾选下方复选框')
  22. choice(name: 'SINGLE_SERVICE', choices: [
  23. 'gateway', 'store', 'second', 'store-platform', 'lawyer', 'job', 'dining',
  24. ], description: '仅 DEPLOY_MODE=single 时生效')
  25. booleanParam(name: 'MULTI_gateway', defaultValue: false)
  26. booleanParam(name: 'MULTI_store', defaultValue: false)
  27. booleanParam(name: 'MULTI_second', defaultValue: false)
  28. booleanParam(name: 'MULTI_store_platform', defaultValue: false)
  29. booleanParam(name: 'MULTI_lawyer', defaultValue: false)
  30. booleanParam(name: 'MULTI_job', defaultValue: false)
  31. booleanParam(name: 'MULTI_dining', defaultValue: false)
  32. string(name: 'GIT_BRANCH', defaultValue: 'uat-20260202', trim: true)
  33. string(name: 'IMAGE_TAG', defaultValue: '', trim: true,
  34. description: '留空则各服务 tag 均为 build-${BUILD_NUMBER}')
  35. choice(name: 'DEPLOY_STRATEGY', choices: ['rolling', 'canary'])
  36. string(name: 'CANARY_WEIGHT', defaultValue: '10', trim: true)
  37. string(name: 'HARBOR_REGISTRY', defaultValue: '39.106.135.88', trim: true)
  38. string(name: 'HARBOR_PROJECT', defaultValue: 'alien_cloud', trim: true)
  39. string(name: 'BASE_IMAGE', defaultValue: '39.106.135.88/alien_cloud/base/openjdk8-ffmpeg:v1', trim: true)
  40. string(name: 'K8S_NAMESPACE', defaultValue: 'alien-produ', trim: true)
  41. booleanParam(name: 'SKIP_MAVEN', defaultValue: false)
  42. booleanParam(name: 'DRY_RUN', defaultValue: false)
  43. }
  44. environment {
  45. MAVEN_HOME = tool '3.6.3'
  46. PATH = "${MAVEN_HOME}/bin:${env.PATH}"
  47. GIT_URL = 'http://8.152.195.41:3000/alien/alien_cloud'
  48. GIT_CREDENTIALS = 'zhanghaomimapingzheng'
  49. HARBOR_CREDENTIALS = 'harbor-robot-alien'
  50. KUBECONFIG_CREDENTIALS = 'ack-kubeconfig-alien'
  51. }
  52. stages {
  53. stage('Checkout') {
  54. steps {
  55. script {
  56. def branch = (params.GIT_BRANCH ?: 'uat-20260202').trim()
  57. k8s.checkoutBranch(this, branch, env.GIT_URL, env.GIT_CREDENTIALS)
  58. env.SELECTED_SERVICES = reg.filterServices(reg.getServiceRegistry(), params)*.prodDir.join(',')
  59. echo ">>> 本次发版服务: ${env.SELECTED_SERVICES}"
  60. }
  61. }
  62. }
  63. stage('Maven Package (all modules)') {
  64. when { expression { return !params.SKIP_MAVEN } }
  65. steps {
  66. script { k8s.mavenPackageAll(this) }
  67. }
  68. }
  69. stage('Build Push & Deploy') {
  70. steps {
  71. script {
  72. def services = reg.filterServices(reg.getServiceRegistry(), params)
  73. def tag = (params.IMAGE_TAG ?: '').trim() ?: "build-${env.BUILD_NUMBER}"
  74. def common = [
  75. harborRegistry: params.HARBOR_REGISTRY,
  76. harborProject: params.HARBOR_PROJECT,
  77. baseImage: params.BASE_IMAGE,
  78. harborCredentialsId: env.HARBOR_CREDENTIALS,
  79. k8sNamespace: params.K8S_NAMESPACE,
  80. deployStrategy: params.DEPLOY_STRATEGY,
  81. canaryWeight: (params.CANARY_WEIGHT ?: '10').trim(),
  82. kubeCredentialsId: env.KUBECONFIG_CREDENTIALS,
  83. ]
  84. services.each { svc ->
  85. def imageRef = "${params.HARBOR_REGISTRY}/${params.HARBOR_PROJECT}/${svc.prodDir}:${tag}"
  86. echo ">>> === ${svc.prodDir} === ${imageRef}"
  87. if (!params.DRY_RUN) {
  88. k8s.dockerBuildAndPush(this, svc + common + [imageRef: imageRef])
  89. k8s.deployToAck(this, svc + common + [
  90. imageRef: imageRef,
  91. deploymentStable: svc.deployName,
  92. deploymentCanary: "${svc.deployName}-canary",
  93. ingressCanary: "${svc.deployName}-canary",
  94. ])
  95. }
  96. }
  97. }
  98. }
  99. }
  100. }
  101. post {
  102. success { echo ">>> 整体流水线完成: ${env.SELECTED_SERVICES}" }
  103. }
  104. }