参考:https://www.qikqiak.com/post/gitlab-ci-k8s-cluster-feature/

1. 创建部署令牌和变量

Kubernetes需要从项目的GitLab容器注册表中获取定制的Docker映像

  • 在GitLab中创建docker 镜像库部署令牌
  • 使用我们的部署令牌凭据创建环境变量
  • 创造和使用 kubernetes image pull secret

(1)创建部署令牌

项目 -> 设置 -> 仓库 -> 部署令牌 -> 创建部署令牌

7.2 部署令牌和映像拉取 secrets - 图1

gitlab+deploy-token-1
Wt7soWvUeRkHg2f79J1C

(2)创建变量

项目 -> 设置 -> CI/CD -> 变量

7.2 部署令牌和映像拉取 secrets - 图2

2. 部署

// .gitalb-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. stop_review:
  73. stage: review
  74. image: harbor.xiodi.cn/tools/kubectl:1.14.8
  75. variables:
  76. GIT_STRATEGY: none
  77. tags:
  78. - docker
  79. - host20133-docker
  80. environment:
  81. name: review/$CI_COMMIT_REF_NAME
  82. action: stop
  83. script:
  84. - kubectl delete --ignore-not-found=true secret regcred
  85. - kubectl delete --ignore-not-found=true -f Deploy/kubernetes/ingress-edu-java-spring.yml
  86. - kubectl delete --ignore-not-found=true -f Deploy/kubernetes/service-edu-java-spring.yml
  87. - kubectl delete --ignore-not-found=true -f Deploy/kubernetes/deployment-edu-java-spring.yml
  88. when: manual