{{< details >}}
- Tier: 基础版,专业版,旗舰版
- Offering: JihuLab.com, 私有化部署
{{< /details >}}
在启用 自动 DevOps 之前,我们建议您为部署做好准备。如果没有准备,您可以用它来构建和测试您的应用,然后再配置部署。
准备部署:
- 定义 部署策略。
- 准备 基础域。
-
定义您希望在哪里部署:
- 启用自动 DevOps。
自动 DevOps 部署策略
在使用自动 DevOps 部署您的应用时,请选择最适合您需求的 持续部署策略:
部署策略 | 设置 | 方法论 |
---|---|---|
持续部署到生产环境 | 启用 自动部署,默认分支会持续部署到生产环境。 | 持续部署到生产环境。 |
使用定时增量推出的持续部署到生产环境 | 设置 INCREMENTAL_ROLLOUT_MODE 变量为 timed 。 |
持续部署到生产环境,推出之间有 5 分钟延迟。 |
自动部署到预生产环境,手动部署到生产环境 | 设置 STAGING_ENABLED 为 1 和 INCREMENTAL_ROLLOUT_MODE 为 manual 。 |
默认分支会持续部署到预生产环境并持续交付到生产环境。 |
您可以在启用自动 DevOps 或之后选择部署方法:
- 在左侧边栏中选择 搜索或转到 并找到您的项目。
- 选择 设置 > CI/CD。
- 展开 自动 DevOps。
- 选择部署策略。
- 选择 保存更改。
{{< 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.12+ 集群。对于 Kubernetes 1.16+ 集群,您必须进行其他配置,以便 自动部署 Kubernetes 1.16+。
-
对于外部 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,通常使用 Docker 或 Kubernetes 执行器,并启用 特权模式。runner 不需要安装在 Kubernetes 集群中,但 Kubernetes 执行器易于使用并能自动扩展。您也可以使用 Docker Machine 配置基于 Docker 的 runner 进行自动扩展。
-
证书管理器(可选,用于 TLS/HTTPS)
要为您的应用启用 HTTPS 端点,您可以安装证书管理器,一个原生 Kubernetes 证书管理控制器,可帮助发行证书。在您的集群上安装证书管理器会颁发 Let’s Encrypt 证书,并确保证书有效且最新。
如果您没有配置 Kubernetes 或 Prometheus,那么 自动审核应用 和 自动部署 会被跳过。
在满足所有要求后,您可以 启用自动 DevOps。
自动 DevOps 对裸机的要求
根据 Kubernetes Ingress-NGINX 文档:
在传统云环境中,网络负载均衡器可以按需提供,一个 Kubernetes manifest 足以为 NGINX Ingress 控制器提供给外部客户端的单一接触点,并间接地提供给集群内部运行的任何应用程序。裸机环境缺乏这种便利,需要稍微不同的设置来为外部消费者提供同类的访问。