{{< details >}}

  • Tier: 基础版,专业版,旗舰版
  • Offering: JihuLab.com, 私有化部署

{{< /details >}}

在启用 自动 DevOps 之前,我们建议您为部署做好准备。如果没有准备,您可以用它来构建和测试您的应用,然后再配置部署。

准备部署:

  1. 定义 部署策略
  2. 准备 基础域
  3. 定义您希望在哪里部署:

    1. Kubernetes
    2. Amazon Elastic Container Service (ECS)
    3. Amazon EC2
    4. 裸金属
  4. 启用自动 DevOps

自动 DevOps 部署策略

在使用自动 DevOps 部署您的应用时,请选择最适合您需求的 持续部署策略

部署策略 设置 方法论
持续部署到生产环境 启用 自动部署,默认分支会持续部署到生产环境。 持续部署到生产环境。
使用定时增量推出的持续部署到生产环境 设置 INCREMENTAL_ROLLOUT_MODE 变量为 timed 持续部署到生产环境,推出之间有 5 分钟延迟。
自动部署到预生产环境,手动部署到生产环境 设置 STAGING_ENABLED1INCREMENTAL_ROLLOUT_MODEmanual 默认分支会持续部署到预生产环境并持续交付到生产环境。

您可以在启用自动 DevOps 或之后选择部署方法:

  1. 在左侧边栏中选择 搜索或转到 并找到您的项目。
  2. 选择 设置 > CI/CD
  3. 展开 自动 DevOps
  4. 选择部署策略。
  5. 选择 保存更改

{{< alert type=”note” >}}

使用 蓝绿部署 技术来最小化停机时间和风险。

{{< /alert >}}

自动 DevOps 基础域

自动 DevOps 基础域是使用 自动审核应用自动部署 所必需的。

要定义基础域,可以:

  • 在项目、群组或实例级别:转到您的集群设置并在那里添加它。
  • 在项目或群组级别:将其作为环境变量添加:KUBE_INGRESS_BASE_DOMAIN
  • 在实例级别:转到 管理员 区域,然后 设置 > CI/CD > 持续集成和交付 并在那里添加它。

基础域变量 KUBE_INGRESS_BASE_DOMAIN 遵循与 其他环境变量相同的优先顺序

如果您没有在项目和群组中指定基础域,自动 DevOps 将使用实例范围的 自动 DevOps 域

自动 DevOps 需要一个通配符 DNS A 记录来匹配基础域。对于 example.com 的基础域,您需要一个 DNS 条目,如:

*.example.com   3600     A     10.0.2.2

在这种情况下,部署的应用程序从 example.com 服务,而 10.0.2.2 是您的负载均衡器的 IP 地址,通常是 NGINX(查看要求)。设置 DNS 记录超出了本文档范围,请与您的 DNS 提供商确认信息。

或者,您可以使用像 nip.io 这样的免费公共服务,它提供自动通配符 DNS,而无需任何配置。对于 nip.io,将自动 DevOps 基础域设置为 10.0.2.2.nip.io

完成设置后,所有请求都会到达负载均衡器,它将请求路由到运行您应用程序的 Kubernetes pods。

自动 DevOps 对 Kubernetes 的要求

要充分利用自动 DevOps 与 Kubernetes 的结合,您需要:

  • Kubernetes(用于 自动审核应用自动部署

    要启用部署,您需要:

    1. 为您的项目提供 Kubernetes 1.12+ 集群。对于 Kubernetes 1.16+ 集群,您必须进行其他配置,以便 自动部署 Kubernetes 1.16+
    2. 对于外部 HTTP 流量,需要一个 Ingress 控制器。对于常规部署,任何 Ingress 控制器都应该可以工作,但从极狐GitLab 14.0 开始,金丝雀部署 需要 NGINX Ingress。您可以通过极狐GitLab 集群管理项目模板 或手动使用 ingress-nginx Helm chart 部署 NGINX Ingress 控制器到您的 Kubernetes 集群。

      当使用 自定义 charts 进行部署时,您必须 注解 Ingress manifest 以便被 Prometheus 使用 prometheus.io/scrape: "true"prometheus.io/port: "10254" 进行抓取。

      {{< alert type=”note” >}}

      如果您的集群安装在裸机上,请参见 自动 DevOps 对裸机的要求

      {{< /alert >}}

  • 基础域(用于 自动审核应用自动部署

    您必须 指定自动 DevOps 基础域,所有自动 DevOps 应用都使用这个域。该域必须配置有通配符 DNS。

  • 极狐GitLab Runner(用于所有阶段)

    您的 runner 必须配置为运行 Docker,通常使用 DockerKubernetes 执行器,并启用 特权模式。runner 不需要安装在 Kubernetes 集群中,但 Kubernetes 执行器易于使用并能自动扩展。您也可以使用 Docker Machine 配置基于 Docker 的 runner 进行自动扩展。

    runner 应注册为整个极狐GitLab 实例的 实例 runner,或分配给特定项目的 项目 runner

  • 证书管理器(可选,用于 TLS/HTTPS)

    要为您的应用启用 HTTPS 端点,您可以安装证书管理器,一个原生 Kubernetes 证书管理控制器,可帮助发行证书。在您的集群上安装证书管理器会颁发 Let’s Encrypt 证书,并确保证书有效且最新。

如果您没有配置 Kubernetes 或 Prometheus,那么 自动审核应用自动部署 会被跳过。

在满足所有要求后,您可以 启用自动 DevOps

自动 DevOps 对裸机的要求

根据 Kubernetes Ingress-NGINX 文档:

在传统云环境中,网络负载均衡器可以按需提供,一个 Kubernetes manifest 足以为 NGINX Ingress 控制器提供给外部客户端的单一接触点,并间接地提供给集群内部运行的任何应用程序。裸机环境缺乏这种便利,需要稍微不同的设置来为外部消费者提供同类的访问。