Help us learn about your current experience with the documentation. Take the survey.

部署面板(已弃用)

  • 版本:Free, Premium, Ultimate
  • 提供:GitLab.com, GitLab Self-Managed, GitLab Dedicated

此功能在 GitLab 14.5 中 已弃用存在一个史诗任务 用于将此功能添加到 agent

在 GitLab 自托管版上,默认情况下此功能不可用。要启用此功能,管理员可以 启用名为 certificate_based_clusters 的功能标志

GitLab 部署面板提供了在 Kubernetes 上运行的每个 CI 环境 的当前健康状态和状态的统一视图,显示部署中 pod 的状态。开发人员和其他团队成员可以在他们已经使用的工作流程中逐个 pod 查看部署的进度和状态,无需访问 Kubernetes。

如果您有 Kubernetes 集群,可以使用 Auto DevOps 自动将应用程序部署到生产环境。

通过部署面板,您可以更深入地了解部署情况,具有以下优势:

  • 从部署开始就跟踪,而不仅仅是在完成时
  • 观察构建在多个服务器上的部署过程
  • 更详细的状态信息(成功、运行中、失败、等待中、未知)
  • 查看 金丝雀部署

以下是生产环境的部署面板示例。

部署面板首页

方块代表您 Kubernetes 集群中与给定环境关联的 pod。将鼠标悬停在每个方块上,您可以看到正在部署的部署状态。百分比是更新到最新版本的 pod 的百分比。

部署面板与 Kubernetes 紧密集成,因此您应该熟悉:

使用场景

部署面板是特定环境的 Kubernetes pod 的可视化表示,因此有很多使用场景。举几个例子:

  • 您想要将暂存环境中运行的内容提升到生产环境。因此,您前往环境列表,验证暂存环境中运行的内容是否符合您的预期,然后选择 手动作业 部署到生产环境。
  • 您触发了一个部署,有很多容器需要升级,您知道这需要一些时间(您还限制了部署速度,每次只停用 X 个容器)。但您需要告诉某人何时部署完成,因此您前往环境列表,查看生产环境,实时查看每个 pod 部署时的进度。
  • 您收到报告说生产环境中有异常,因此您查看生产环境,查看正在运行的内容,以及部署是否正在进行、卡住或失败。
  • 您有一个看起来不错的 MR,但您想在暂存环境中运行它,因为暂存环境在某些方面设置得更接近生产环境。因此,您前往环境列表,找到您感兴趣的 审查应用,然后选择手动操作将其部署到暂存环境。

启用部署面板

要显示特定 环境 的部署面板,您应该:

  1. 拥有一个带有部署阶段的 已定义环境

  2. 拥有一个正在运行的 Kubernetes 集群。

    如果您使用 OpenShift,请确保您使用的是 Deployment 资源 而不是 DeploymentConfiguration。否则,部署面板将无法正确渲染。有关更多信息,请阅读 OpenShift 文档GitLab 问题 #4584

  3. 使用 dockerkubernetes executor 配置 GitLab Runner

  4. 为集群在您的项目中配置 Kubernetes 集成。Kubernetes namespace 特别重要,因为您需要它 用于您的部署脚本(通过 KUBE_NAMESPACE 部署变量暴露)。

  5. 确保 Kubernetes 注解 app.gitlab.com/env: $CI_ENVIRONMENT_SLUGapp.gitlab.com/app: $CI_PROJECT_PATH_SLUG 应用于 部署、副本集和 pod,其中 $CI_ENVIRONMENT_SLUG$CI_PROJECT_PATH_SLUG 是 CI/CD 变量的值。这样我们可以在可能有多个环境的集群/命名空间中 查找正确的环境。这些资源应包含在 Kubernetes 服务设置中定义的命名空间内。您可以使用 Auto deploy .gitlab-ci.yml 模板,它具有预定义的阶段和命令,并自动 应用注解。每个项目在 Kubernetes 中也必须有一个唯一的命名空间。下图演示了这在 Kubernetes 内部如何显示。

    如果您使用 GCP 管理集群,可以通过导航到 Workloads > deployment name > Details 在 GCP 本身查看部署详情:

    部署面板 Kubernetes 标签

设置完所有上述说明并且管道至少运行一次后, 前往 Operate > Environments 下的环境页面。

部署面板默认可见。您可以明确选择 其各自环境名称旁边的三角形来隐藏它们。

示例清单文件

以下示例是 Kubernetes 清单部署文件的摘录,使用两个注解 app.gitlab.com/envapp.gitlab.com/app 来启用 部署面板

apiVersion: apps/v1
kind: Deployment
metadata:
  name: "APPLICATION_NAME"
  annotations:
    app.gitlab.com/app: ${CI_PROJECT_PATH_SLUG}
    app.gitlab.com/env: ${CI_ENVIRONMENT_SLUG}
spec:
  replicas: 1
  selector:
    matchLabels:
      app: "APPLICATION_NAME"
  template:
    metadata:
      labels:
        app: "APPLICATION_NAME"
      annotations:
        app.gitlab.com/app: ${CI_PROJECT_PATH_SLUG}
        app.gitlab.com/env: ${CI_ENVIRONMENT_SLUG}

这些注解应用于部署、副本集和 pod。通过更改副本数量,例如 kubectl scale --replicas=3 deploy APPLICATION_NAME -n ${KUBE_NAMESPACE},您可以从面板上跟踪实例的 pod。

YAML 文件是静态的。如果您使用 kubectl apply 应用它,您必须 手动提供项目和环境 slug,或者创建一个脚本来 在应用前替换 YAML 中的变量。

金丝雀部署

一种流行的 CI 策略,其中将舰队的一小部分更新到您应用程序的新版本。

阅读更多关于金丝雀部署的信息。

进一步阅读