BHOL703 - 在流水线中增加Kubernetes环境部署并进行人工审批

本节实验中,我们将延续之前的流水线配置,将 boathouse-calculator 部署到 minikube 的 k8s 环境中,并在部署之前添加人工审核步骤。

01 - 获取 minikube 的 kubeconfig 文件

执行以下命令获取完整的minikube kubeconfig文件

  1. # 启动 minikube 并确保当前的 kubectl context 被指向 minikube
  2. minikube start
  3. # 获取 kubeconfig 内容并采用单一文件(--flatten=true)方式输出
  4. kubectl config view --flatten=true > minikube.kubeconfig
  5. # 使用vscode打开生成的文件
  6. code minikube.kubeconfig

文件内容如下,注意:此文件中的 certificate-authority, client-certificate 和 client-key 都采用了 -data 的方式输出,方便我们添加到Jenkins的密钥管理中。

BHOL703 - 在流水线中增加Kubernetes环境部署并进行人工审批 - 图1

02 - 在 Jenkins 中添加 Kubernetes 密钥配置

在 Jenkins 中导航到 凭据 | 系统 | 全局凭据 中添加一个 Kubernetes configuration (kubeconfig), 并采用 Enter directly 的方式,将以上的kubeconfig内容粘贴进去,将此密钥命名为 minikube

BHOL703 - 在流水线中增加Kubernetes环境部署并进行人工审批 - 图2

03 - 准备k8s集群

运行以下命令创建 命名空间

  1. kubectl create namespace boathouse-test
  2. kubectl create namespace boathouse-prod

运行以下命令,分别在 boathouse-test 和 boathouse-prod 命名空间中创建名为regcred的密钥,用于保存容器镜像仓库的账号。

  1. kubectl create secret docker-registry regcred --docker-server=[docker registry url] --docker-username=[username] --docker-password=[password] --docker-email=info@idcf.io -n boathouse-test
  2. kubectl create secret docker-registry regcred --docker-server=[docker registry url] --docker-username=[username] --docker-password=[password] --docker-email=info@idcf.io -n boathouse-prod

04 - 添加k8s部署步骤

在 boathouse-calculator 项目中添加两个文件

  • kube-deploy-test.yaml
  • kube-deploy-prod.yaml

两个文件使用同样的内容

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: boathouse-calculator
  5. namespace: #{K8S_NAMESPACE}#
  6. spec:
  7. replicas: 1
  8. selector:
  9. matchLabels:
  10. app: boathouse-calculator
  11. strategy:
  12. rollingUpdate:
  13. maxSurge: 1
  14. maxUnavailable: 1
  15. minReadySeconds: 5
  16. template:
  17. metadata:
  18. labels:
  19. app: boathouse-calculator
  20. spec:
  21. nodeSelector:
  22. "beta.kubernetes.io/os": linux
  23. containers:
  24. - name: boathouse-calculator
  25. image: #{REGISTRY_URL}#/#{REGISTRY_NS}#/boathouse-calculator:latest
  26. ports:
  27. - containerPort: 3000
  28. resources:
  29. requests:
  30. cpu: 250m
  31. limits:
  32. cpu: 500m
  33. imagePullSecrets:
  34. - name: regcred
  35. restartPolicy: Always
  36. ---
  37. apiVersion: v1
  38. kind: Service
  39. metadata:
  40. name: boathouse-calculator
  41. namespace: #{K8S_NAMESPACE}#
  42. spec:
  43. type: LoadBalancer
  44. ports:
  45. - port: 80
  46. targetPort: 3000
  47. selector:
  48. app: boathouse-calculator

修改 Jenkinsfile,在底部添加以下步骤

注意:以下文件中增加了2个环境变量需要添加到Jenkins中

  • K8S_NAMESPACE_TEST: 设置为 boathouse-test
  • K8S_NAMESPACE_PROD: 设置为 boathouse-prod
  1. // 测试环境部署
  2. stage('CD - K8S TEST') {
  3. steps {
  4. timeout(5) {
  5. input message: '是否部署到测试环境?', ok: '是', submitter: 'admin'
  6. }
  7. sh "sed -i 's/#{REGISTRY_URL}#/${REGISTRY_URL}/g' kube-deploy-test.yaml"
  8. sh "sed -i 's/#{REGISTRY_NS}#/${REGISTRY_NS}/g' kube-deploy-test.yaml"
  9. sh "sed -i 's/#{K8S_NAMESPACE}#/${K8S_NAMESPACE_TEST}/g' kube-deploy-test.yaml"
  10. kubernetesDeploy configs: 'kube-deploy-test.yaml', deleteResource: false, kubeconfigId: 'minikube', secretName: 'regcred', secretNamespace: 'boathouse-test'
  11. }
  12. }
  13. // 测试环境部署
  14. stage('CD - K8S Prod') {
  15. steps {
  16. timeout(5) {
  17. input message: '是否部署到生产环境?', ok: '是', submitter: 'admin'
  18. }
  19. sh "sed -i 's/#{REGISTRY_URL}#/${REGISTRY_URL}/g' kube-deploy-prod.yaml"
  20. sh "sed -i 's/#{REGISTRY_NS}#/${REGISTRY_NS}/g' kube-deploy-prod.yaml"
  21. sh "sed -i 's/#{K8S_NAMESPACE}#/${K8S_NAMESPACE_PROD}/g' kube-deploy-prod.yaml"
  22. kubernetesDeploy configs: 'kube-deploy-prod.yaml', deleteResource: false, kubeconfigId: 'minikube', secretName: 'regcred', secretNamespace: 'boathouse-prod'
  23. }
  24. }

提交以上文件到Gitea服务器

BHOL703 - 在流水线中增加Kubernetes环境部署并进行人工审批 - 图3

05 - 查看流水线运行状态并进行人工审批

我们在以上的Jenkinsfile中增加了人工介入的步骤,流水线在进行k8s部署动作之前会停下来询问是否继续,见下图:

BHOL703 - 在流水线中增加Kubernetes环境部署并进行人工审批 - 图4

点击 是 以后,流水线会继续运行完成对应的部署动作,全部完成后可以通过k8s查看对应的 命名空间 中已经运行中的 calculator pod。

BHOL703 - 在流水线中增加Kubernetes环境部署并进行人工审批 - 图5

小结

本节实验中我们对基础流水线进行扩展,完成了k8s环境的自动化部署并且加入了人工审批动作。人工审批动作对于流水线非常重要,当我们需要根据应用的运行情况决定是否继续运行流水线时就需要让流水线暂停等待人工输入。