由于一般情况下,我们的生产环境(production)与测试环境或预生产环境不会处于同一个k8s集群,故,这次,会使用一个新的 k8s 集群部署我们的测试示例。

1. 查看 k8s config

  1. $ cat ~/.kube/config
  2. apiVersion: v1
  3. clusters:
  4. ...
  5. server: https://192.168.20.82:6443
  6. ...

2. 配置环境变量

项目页面 -> 用户设置 -> CI/CD -> 变量

7.4 部署到 production 环境 - 图1

3. 设置 .gitlab-ci.yml

  1. ...
  2. deploy_production:
  3. stage: production
  4. image: harbor.xiodi.cn/tools/kubectl:1.14.8
  5. variables:
  6. INGRESS_HOST: production.xiodi.cn
  7. REGISTRY_VERSION: $CI_COMMIT_TAG
  8. tags:
  9. - docker
  10. - host20133-docker
  11. environment:
  12. name: production
  13. url: http://production.xiodi.cn/hello
  14. script:
  15. - export
  16. - cat "$KUBE82_CONFIG" > ~/kube82
  17. - cat ~/kube82
  18. - export KUBECONFIG=~/kube82
  19. - kubectl delete --ignore-not-found=true secret regcred
  20. - kubectl create secret docker-registry regcred --docker-server=$CI_REGISTRY --docker-username=$GITLAB_DEPLOY_USER --docker-password=$GITLAB_DEPLOY_PW
  21. - cat Deploy/kubernetes/deployment-edu-java-spring.yml | envsubst | kubectl apply -f -
  22. - cat Deploy/kubernetes/service-edu-java-spring.yml | envsubst | kubectl apply -f -
  23. - cat Deploy/kubernetes/ingress-edu-java-spring.yml | envsubst | kubectl apply -f -
  24. only:
  25. variables:
  26. - $CI_COMMIT_TAG =~ /^v.*/

创建合并请求:从 dev 合并到 master,创建 v1.0 tag

4. k8s 验证

  1. $ kubectl get pods
  2. $ kubectl get ingress