Jenkinsfile 4.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. // 与 whole/Jenkinsfile 相同逻辑
  2. def sparseCheckoutProduShared() {
  3. checkout scm: [
  4. $class: 'GitSCM',
  5. branches: scm.branches,
  6. extensions: [
  7. [$class: 'CloneOption', depth: 1, shallow: true, noTags: true],
  8. [$class: 'SparseCheckoutPaths', sparseCheckoutPaths: [
  9. [path: 'docs/jenkins/produ/_shared/'],
  10. ]],
  11. ],
  12. userRemoteConfigs: scm.userRemoteConfigs,
  13. ]
  14. }
  15. def getProduLibs() {
  16. sparseCheckoutProduShared()
  17. def k8s = load 'docs/jenkins/produ/_shared/k8s-produ-lib.groovy'
  18. def reg = load 'docs/jenkins/produ/_shared/service-registry.groovy'
  19. return [k8s, reg]
  20. }
  21. pipeline {
  22. agent any
  23. options {
  24. buildDiscarder(logRotator(numToKeepStr: '20'))
  25. disableConcurrentBuilds()
  26. skipDefaultCheckout(true)
  27. timestamps()
  28. timeout(time: 120, unit: 'MINUTES')
  29. }
  30. parameters {
  31. choice(name: 'DEPLOY_MODE', choices: ['whole', 'single', 'multi'])
  32. choice(name: 'SINGLE_SERVICE', choices: [
  33. 'gateway', 'store', 'second', 'store-platform', 'lawyer', 'job', 'dining',
  34. ])
  35. booleanParam(name: 'MULTI_gateway', defaultValue: false)
  36. booleanParam(name: 'MULTI_store', defaultValue: false)
  37. booleanParam(name: 'MULTI_second', defaultValue: false)
  38. booleanParam(name: 'MULTI_store_platform', defaultValue: false)
  39. booleanParam(name: 'MULTI_lawyer', defaultValue: false)
  40. booleanParam(name: 'MULTI_job', defaultValue: false)
  41. booleanParam(name: 'MULTI_dining', defaultValue: false)
  42. string(name: 'SOURCE_TAG', defaultValue: 'uat-latest', trim: true,
  43. description: 'Harbor UAT tag,默认 uat-latest;回滚填 uat-build-<N>')
  44. string(name: 'TARGET_TAG', defaultValue: '', trim: true)
  45. choice(name: 'PROMOTE_METHOD', choices: ['harbor-api', 'docker-pull'],
  46. description: 'harbor-api=服务端打 tag(快)')
  47. booleanParam(name: 'PARALLEL_ACK_DEPLOY', defaultValue: true)
  48. string(name: 'HARBOR_REGISTRY', defaultValue: '39.105.153.68', trim: true)
  49. string(name: 'HARBOR_PROJECT', defaultValue: 'alien_cloud', trim: true)
  50. choice(name: 'DEPLOY_STRATEGY', choices: ['rolling', 'canary', 'skip'])
  51. string(name: 'CANARY_WEIGHT', defaultValue: '10', trim: true)
  52. string(name: 'K8S_NAMESPACE', defaultValue: 'alien-produ', trim: true)
  53. booleanParam(name: 'DRY_RUN', defaultValue: false)
  54. }
  55. environment {
  56. HARBOR_CREDENTIALS = 'harbor-robot-alien'
  57. KUBECONFIG_CREDENTIALS = 'ack-kubeconfig-alien'
  58. }
  59. stages {
  60. stage('Promote & Deploy') {
  61. steps {
  62. script {
  63. def (k8s, reg) = getProduLibs()
  64. def services = reg.filterServices(reg.getServiceRegistry(), params)
  65. env.SOURCE_TAG_RESOLVED = k8s.requireSourceTag(this, params.SOURCE_TAG)
  66. env.TARGET_TAG_RESOLVED = k8s.resolveTargetTag(this, params.TARGET_TAG)
  67. env.PROMOTE_LIST = services*.prodDir.join(',')
  68. echo ">>> 服务=${env.PROMOTE_LIST} ${env.SOURCE_TAG_RESOLVED} → ${env.TARGET_TAG_RESOLVED}"
  69. k8s.promoteHarborImages(this, services, [
  70. harborRegistry: params.HARBOR_REGISTRY,
  71. harborProject: params.HARBOR_PROJECT,
  72. sourceTag: env.SOURCE_TAG_RESOLVED,
  73. targetTag: env.TARGET_TAG_RESOLVED,
  74. harborCredentialsId: env.HARBOR_CREDENTIALS,
  75. promoteMethod: params.PROMOTE_METHOD,
  76. dryRun: params.DRY_RUN == true,
  77. ])
  78. if (params.DEPLOY_STRATEGY != 'skip' && !params.DRY_RUN) {
  79. k8s.deployServicesToAck(this, services, [
  80. harborRegistry: params.HARBOR_REGISTRY,
  81. harborProject: params.HARBOR_PROJECT,
  82. targetTag: env.TARGET_TAG_RESOLVED,
  83. deployStrategy: params.DEPLOY_STRATEGY,
  84. k8sNamespace: params.K8S_NAMESPACE,
  85. canaryWeight: params.CANARY_WEIGHT,
  86. kubeCredentialsId: env.KUBECONFIG_CREDENTIALS,
  87. parallelDeploy: params.PARALLEL_ACK_DEPLOY == true,
  88. ])
  89. }
  90. }
  91. }
  92. }
  93. }
  94. }