1. dev环境部署

(1) 修改 .gitlab-ci.yml

//.gitlab-ci.yml

  1. variables:
  2. REGISTRY: $CI_REGISTRY/edu-java-demo/edu-java-spring
  3. MAVEN_OPTS: "-Dmaven.repo.local=.m2"
  4. stages:
  5. - test
  6. - build
  7. - package
  8. - review
  9. test:
  10. stage: test
  11. image: harbor.xiodi.cn/tools/openjdk:11.0.6
  12. tags:
  13. - docker
  14. - host20133-docker
  15. script:
  16. - chmod +x ./mvnw && ./mvnw test
  17. cache:
  18. key: maven-repo-cache
  19. paths:
  20. - .m2
  21. build:
  22. stage: build
  23. image: harbor.xiodi.cn/tools/openjdk:11.0.6
  24. tags:
  25. - docker
  26. - host20133-docker
  27. script:
  28. - chmod +x ./mvnw && ./mvnw package
  29. cache:
  30. key: maven-repo-cache
  31. paths:
  32. - .m2
  33. artifacts:
  34. paths:
  35. - target/*.jar
  36. expire_in: 1 week
  37. docker-package:
  38. stage: package
  39. image: harbor.xiodi.cn/tools/docker:18.09.9
  40. services:
  41. - docker:18.09-dind
  42. tags:
  43. - docker
  44. - host20133-docker
  45. variables:
  46. REGISTRY_VERSION: $CI_COMMIT_SHORT_SHA
  47. script:
  48. - export
  49. - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  50. - docker build -t $REGISTRY:$CI_COMMIT_SHORT_SHA -f Dockerfile .
  51. - docker push $REGISTRY:$CI_COMMIT_SHORT_SHA
  52. deploy_review:
  53. stage: review
  54. image: harbor.xiodi.cn/tools/kubectl:1.14.8
  55. variables:
  56. INGRESS_HOST: ${CI_COMMIT_REF_SLUG}.xiodi.cn
  57. REGISTRY_VERSION: $CI_COMMIT_SHORT_SHA
  58. tags:
  59. - docker
  60. - host20133-docker
  61. environment:
  62. name: review/$CI_COMMIT_REF_NAME
  63. url: http://${CI_COMMIT_REF_SLUG}.xiodi.cn/hello
  64. on_stop: stop_review
  65. auto_stop_in: 7 day
  66. script:
  67. - kubectl delete --ignore-not-found=true secret regcred
  68. - kubectl create secret docker-registry regcred --docker-server=$CI_REGISTRY --docker-username=$GITLAB_DEPLOY_USER --docker-password=$GITLAB_DEPLOY_PW
  69. - cat Deploy/kubernetes/deployment-edu-java-spring.yml | envsubst | kubectl apply -f -
  70. - cat Deploy/kubernetes/service-edu-java-spring.yml | envsubst | kubectl apply -f -
  71. - cat Deploy/kubernetes/ingress-edu-java-spring.yml | envsubst | kubectl apply -f -
  72. only:
  73. - branches
  74. except:
  75. - dev
  76. stop_review:
  77. stage: review
  78. image: harbor.xiodi.cn/tools/kubectl:1.14.8
  79. variables:
  80. GIT_STRATEGY: none
  81. tags:
  82. - docker
  83. - host20133-docker
  84. environment:
  85. name: review/$CI_COMMIT_REF_NAME
  86. action: stop
  87. script:
  88. - kubectl delete --ignore-not-found=true secret regcred
  89. - kubectl delete --ignore-not-found=true -f Deploy/kubernetes/ingress-edu-java-spring.yml
  90. - kubectl delete --ignore-not-found=true -f Deploy/kubernetes/service-edu-java-spring.yml
  91. - kubectl delete --ignore-not-found=true -f Deploy/kubernetes/deployment-edu-java-spring.yml
  92. when: manual
  93. deploy_dev:
  94. stage: integration-test
  95. image: harbor.xiodi.cn/tools/kubectl:1.14.8
  96. variables:
  97. INGRESS_HOST: dev.xiodi.cn
  98. REGISTRY_VERSION: $CI_COMMIT_SHORT_SHA
  99. tags:
  100. - docker
  101. - host20133-docker
  102. environment:
  103. name: dev
  104. url: http://dev.xiodi.cn/hello
  105. on_stop: stop_dev
  106. auto_stop_in: 7 day
  107. script:
  108. - kubectl delete --ignore-not-found=true secret regcred
  109. - kubectl create secret docker-registry regcred --docker-server=$CI_REGISTRY --docker-username=$GITLAB_DEPLOY_USER --docker-password=$GITLAB_DEPLOY_PW
  110. - cat Deploy/kubernetes/deployment-edu-java-spring.yml | envsubst | kubectl apply -f -
  111. - cat Deploy/kubernetes/service-edu-java-spring.yml | envsubst | kubectl apply -f -
  112. - cat Deploy/kubernetes/ingress-edu-java-spring.yml | envsubst | kubectl apply -f -
  113. only:
  114. - dev
  115. stop_dev:
  116. stage: integration-test
  117. image: harbor.xiodi.cn/tools/kubectl:1.14.8
  118. variables:
  119. GIT_STRATEGY: none
  120. tags:
  121. - docker
  122. - host20133-docker
  123. environment:
  124. name: dev
  125. action: stop
  126. script:
  127. - kubectl delete --ignore-not-found=true secret regcred
  128. - kubectl delete --ignore-not-found=true -f Deploy/kubernetes/ingress-edu-java-spring.yml
  129. - kubectl delete --ignore-not-found=true -f Deploy/kubernetes/service-edu-java-spring.yml
  130. - kubectl delete --ignore-not-found=true -f Deploy/kubernetes/deployment-edu-java-spring.yml
  131. when: manual

(2) 创建合并请求

feature-1 -> dev

合并完成后,此时,会自动触发 .gitlab-ci.yml 文件执行,进行 dev 环境部署

2. stage 环境部署

预生产环境(stage),我们打算以 release 来创建。

//修改 .gitlab-ci.yml

  1. ...
  2. stages:
  3. - test
  4. - build
  5. - package
  6. - review
  7. - integration-test
  8. - stage-test
  9. ...
  10. docker-package:
  11. stage: package
  12. image: harbor.xiodi.cn/tools/docker:18.09.9
  13. services:
  14. - docker:18.09-dind
  15. tags:
  16. - docker
  17. - host20133-docker
  18. variables:
  19. REGISTRY_VERSION: $CI_COMMIT_SHORT_SHA
  20. script:
  21. - export
  22. - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  23. - docker build -t $REGISTRY:$CI_COMMIT_SHORT_SHA -f Dockerfile .
  24. - test ! -z "${CI_COMMIT_TAG}" && docker tag $REGISTRY:$CI_COMMIT_SHORT_SHA $REGISTRY:${CI_COMMIT_TAG} && docker push $REGISTRY:${CI_COMMIT_TAG}
  25. - docker push $REGISTRY:$CI_COMMIT_SHORT_SHA
  26. ...
  27. deploy_stage:
  28. stage: stage-test
  29. image: harbor.xiodi.cn/tools/kubectl:1.14.8
  30. variables:
  31. INGRESS_HOST: stage.xiodi.cn
  32. REGISTRY_VERSION: $CI_COMMIT_TAG
  33. tags:
  34. - docker
  35. - host20133-docker
  36. environment:
  37. name: stage
  38. url: http://stage.xiodi.cn/hello
  39. on_stop: stop_stage
  40. auto_stop_in: 7 day
  41. script:
  42. - export
  43. - kubectl delete --ignore-not-found=true secret regcred
  44. - kubectl create secret docker-registry regcred --docker-server=$CI_REGISTRY --docker-username=$GITLAB_DEPLOY_USER --docker-password=$GITLAB_DEPLOY_PW
  45. - cat Deploy/kubernetes/deployment-edu-java-spring.yml | envsubst | kubectl apply -f -
  46. - cat Deploy/kubernetes/service-edu-java-spring.yml | envsubst | kubectl apply -f -
  47. - cat Deploy/kubernetes/ingress-edu-java-spring.yml | envsubst | kubectl apply -f -
  48. only:
  49. variables:
  50. - $CI_COMMIT_TAG =~ /^release.*/
  51. stop_stage:
  52. stage: stage-test
  53. image: harbor.xiodi.cn/tools/kubectl:1.14.8
  54. variables:
  55. GIT_STRATEGY: none
  56. tags:
  57. - docker
  58. - host20133-docker
  59. environment:
  60. name: stage
  61. action: stop
  62. script:
  63. - kubectl delete --ignore-not-found=true secret regcred
  64. - kubectl delete --ignore-not-found=true -f Deploy/kubernetes/ingress-edu-java-spring.yml
  65. - kubectl delete --ignore-not-found=true -f Deploy/kubernetes/service-edu-java-spring.yml
  66. - kubectl delete --ignore-not-found=true -f Deploy/kubernetes/deployment-edu-java-spring.yml
  67. when: manual
  68. only:
  69. variables:
  70. - $CI_COMMIT_TAG =~ /^release.*/

创建 release-1.0 tag。