- Auto DevOps 横幅
- 自定义构建包
- 自定义 Dockerfiles
- 自定义容器镜像
- 通过 API 扩展 Auto DevOps
- 转发 CI/CD 变量到构建环境
- 自定义 Helm chart
-
自定义
.gitlab-ci.yml
- 使用多个 Kubernetes 集群
- 自定义 Kubernetes 命名空间
- 使用本地 Docker 注册表托管的镜像
- PostgreSQL 数据库支持
{{< details >}}
- Tier: 基础版,专业版,旗舰版
- Offering: JihuLab.com,私有化部署
{{< /details >}}
您可以自定义 Auto DevOps 的组件以满足您的需求。例如,您可以:
- 添加自定义 构建包,Dockerfiles,和 Helm charts。
- 使用自定义 CI/CD 配置 启用分阶段和金丝雀部署。
- 通过 极狐GitLab API 扩展 Auto DevOps。
Auto DevOps 横幅
当 Auto DevOps 未启用时,至少具有维护者角色的用户会看到一个横幅:
可以为以下对象禁用横幅:
- 用户,当他们自己关闭横幅时。
- 项目,通过明确 禁用 Auto DevOps。
- 整个极狐GitLab 实例:
-
通过管理员在 Rails 控制台中运行以下命令:
Feature.enable(:auto_devops_banner_disabled)
-
通过使用管理员访问令牌的 REST API:
curl --data "value=true" --header "PRIVATE-TOKEN: <personal_access_token>" "https://gitlab.example.com/api/v4/features/auto_devops_banner_disabled"
-
自定义构建包
您可以在以下情况下自定义您的构建包:
- 您的项目的自动构建包检测失败。
- 您需要更大的构建控制权。
使用 Cloud Native Buildpacks 自定义构建包
指定以下任意项:
- 使用
pack
的 URI 规格格式的 CI/CD 变量BUILDPACK_URL
。 - 包含您想要包含的构建包的
project.toml
项目描述符。
多个构建包
由于 Auto Test 无法使用 .buildpacks
文件,Auto DevOps 不支持多个构建包。用于解析 .buildpacks
文件的构建包 heroku-buildpack-multi 不提供必要的命令 bin/test-compile
和 bin/test
。
要仅使用单个自定义构建包,您应该提供项目 CI/CD 变量 BUILDPACK_URL
。
自定义 Dockerfiles
如果您的项目存储库的根目录中有一个 Dockerfile,Auto DevOps 会根据 Dockerfile 构建一个 Docker 镜像。这可能比使用构建包更快。尤其是如果您的 Dockerfile 基于 Alpine 时,它也可能产生更小的镜像。
如果您设置了 DOCKERFILE_PATH
CI/CD 变量,则 Auto Build 会在那里寻找 Dockerfile。
传递参数给 docker build
您可以通过项目 CI/CD 变量 AUTO_DEVOPS_BUILD_IMAGE_EXTRA_ARGS
向 docker build
传递参数。
例如,要构建基于 ruby:alpine
而不是默认的 ruby:latest
的 Docker 镜像:
- 将
AUTO_DEVOPS_BUILD_IMAGE_EXTRA_ARGS
设置为--build-arg=RUBY_VERSION=alpine
。 -
将以下内容添加到自定义 Dockerfile 中:
ARG RUBY_VERSION=latest FROM ruby:$RUBY_VERSION # Include your content here
要传递复杂的值,如空格和换行符,请使用 Base64 编码。复杂的未编码值可能会导致字符转义问题。
{{< alert type=”warning” >}}
不要将密钥作为 Docker 构建参数传递。密钥可能会持久化在您的镜像中。
{{< /alert >}}
自定义容器镜像
默认情况下,自动部署 部署一个由 自动构建 构建并推送到极狐GitLab 注册表的容器镜像。您可以通过定义特定变量来覆盖此行为:
项目 | 默认值 | 可以被覆盖 |
---|---|---|
镜像路径 |
$CI_REGISTRY_IMAGE/$CI_COMMIT_REF_SLUG 用于分支流水线。$CI_REGISTRY_IMAGE 用于标签流水线。 |
$CI_APPLICATION_REPOSITORY |
镜像标签 |
$CI_COMMIT_SHA 用于分支流水线。$CI_COMMIT_TAG 用于标签流水线。 |
$CI_APPLICATION_TAG |
这些变量也影响自动构建和自动容器扫描。如果您不想构建和推送镜像到 $CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG
,仅包含 Jobs/Deploy.gitlab-ci.yml
,或者跳过 build
任务。
如果您使用自动容器扫描并为 $CI_APPLICATION_REPOSITORY
设置了值,那么您还应该更新 $CS_DEFAULT_BRANCH_IMAGE
。有关更多信息,请参阅 设置默认分支镜像。
以下是您 .gitlab-ci.yml
中的示例设置:
variables:
CI_APPLICATION_REPOSITORY: <your-image-repository>
CI_APPLICATION_TAG: <the-tag>
通过 API 扩展 Auto DevOps
您可以使用极狐GitLab API 扩展和管理您的 Auto DevOps 配置:
-
使用 API 调用访问设置,包括
auto_devops_enabled
,以默认启用项目上的 Auto DevOps。 - 创建新项目。
- 编辑群组。
- 编辑项目。
转发 CI/CD 变量到构建环境
要将 CI/CD 变量转发到构建环境,请将您想要转发的变量名称添加到 AUTO_DEVOPS_BUILD_IMAGE_FORWARDED_CI_VARIABLES
CI/CD 变量中。用逗号分隔多个变量。
例如,要转发变量 CI_COMMIT_SHA
和 CI_ENVIRONMENT_NAME
:
variables:
AUTO_DEVOPS_BUILD_IMAGE_FORWARDED_CI_VARIABLES: CI_COMMIT_SHA,CI_ENVIRONMENT_NAME
如果您使用构建包,转发的变量会自动作为环境变量可用。
如果您使用 Dockerfile:
-
要激活实验性 Dockerfile 语法,请将以下内容添加到您的 Dockerfile 中:
# syntax = docker/dockerfile:experimental
-
要在
Dockerfile
中的任何RUN $COMMAND
中使密钥可用,请挂载密钥文件并在运行$COMMAND
之前进行源操作:RUN --mount=type=secret,id=auto-devops-build-secrets . /run/secrets/auto-devops-build-secrets && $COMMAND
当设置了 AUTO_DEVOPS_BUILD_IMAGE_FORWARDED_CI_VARIABLES
时,Auto DevOps 启用实验性的 Docker BuildKit 功能以使用 --secret
标志。
自定义 Helm chart
Auto DevOps 使用 Helm 将您的应用程序部署到 Kubernetes。您可以通过在您的项目存储库中捆绑一个 chart 或指定一个项目 CI/CD 变量来覆盖使用的 Helm chart:
-
捆绑的 chart - 如果您的项目有一个
./chart
目录,其中有一个Chart.yaml
文件,Auto DevOps 检测到该 chart 并使用它,而不是默认 chart。 -
项目变量 - 创建一个 项目 CI/CD 变量
AUTO_DEVOPS_CHART
,带有自定义 chart 的 URL。您还可以创建五个项目变量:-
AUTO_DEVOPS_CHART_REPOSITORY
- 自定义 chart 存储库的 URL。 -
AUTO_DEVOPS_CHART
- chart 的路径。 -
AUTO_DEVOPS_CHART_REPOSITORY_INSECURE
- 设置为非空值以向 Helm 命令添加--insecure-skip-tls-verify
参数。 -
AUTO_DEVOPS_CHART_CUSTOM_ONLY
- 设置为非空值以仅使用自定义 chart。默认情况下,从极狐GitLab 下载最新的 chart。 -
AUTO_DEVOPS_CHART_VERSION
- 部署 chart 的版本。
-
自定义 Helm chart 值
要覆盖 values.yaml
文件中的默认值,请执行以下操作之一:
- 将名为
.gitlab/auto-deploy-values.yaml
的文件添加到您的存储库。此文件默认用于 Helm 升级。 - 将具有不同名称或路径的文件添加到存储库,并使用路径和名称设置
HELM_UPGRADE_VALUES_FILE
CI/CD 变量。
某些值无法通过上述选项覆盖。要覆盖像 replicaCount
这样的设置,请使用 REPLICAS
构建和部署 CI/CD 变量。
自定义 helm upgrade
auto-deploy-image 使用 helm upgrade
命令。要自定义此命令,请使用 HELM_UPGRADE_EXTRA_ARGS
CI/CD 变量传递选项。
例如,要在运行 helm upgrade
时禁用预升级和后升级钩子:
variables:
HELM_UPGRADE_EXTRA_ARGS: --no-hooks
有关完整选项列表,请参阅 官方 helm upgrade
文档。
限制 Helm chart 到一个环境
要将自定义 chart 限制到一个环境,请为您的 CI/CD 变量添加环境范围。有关更多信息,请参阅 限制 CI/CD 变量的环境范围。
自定义 .gitlab-ci.yml
Auto DevOps 高度可定制,因为 Auto DevOps 模板 是 .gitlab-ci.yml
文件的实现。该模板仅使用对任何 .gitlab-ci.yml
实现可用的功能。
要向 Auto DevOps 使用的 CI/CD 流水线添加自定义行为:
-
在您的存储库根目录中添加一个
.gitlab-ci.yml
文件,内容如下:include: - template: Auto-DevOps.gitlab-ci.yml
-
将您的更改添加到
.gitlab-ci.yml
文件中。您的更改将与 Auto DevOps 模板合并。有关include
如何合并您的更改的更多信息,请参阅 include 文档。
要从 Auto DevOps 流水线中移除行为:
- 将 Auto DevOps 模板 复制到您的项目中。
- 根据需要编辑您复制的模板。
使用 Auto DevOps 的单个组件
如果您只需要 Auto DevOps 提供的功能子集,您可以在自己的 .gitlab-ci.yml
中包含单个 Auto DevOps 任务。确保在您的 .gitlab-ci.yml
文件中也定义每个任务所需的阶段。
例如,要使用 自动构建,您可以将以下内容添加到您的 .gitlab-ci.yml
中:
stages:
- build
include:
- template: Jobs/Build.gitlab-ci.yml
有关可用任务的列表,请参阅 Auto DevOps 模板。
使用多个 Kubernetes 集群
请参阅 Auto DevOps 使用多个 Kubernetes 集群。
自定义 Kubernetes 命名空间
在极狐GitLab 14.5 及更早版本中,您可以使用 environment:kubernetes:namespace
来指定环境的命名空间。然而,此功能已被弃用,以及证书基础集成。
您现在应该使用 KUBE_NAMESPACE
环境变量并 限制其环境范围。
使用本地 Docker 注册表托管的镜像
您可以配置许多 Auto DevOps 任务在 离线环境 中运行:
- 从 Docker Hub 和
registry.gitlab.com
复制所需的 Auto DevOps Docker 镜像到他们的本地极狐GitLab 容器注册表。 -
镜像在本地注册表中托管并可用后,编辑
.gitlab-ci.yml
以指向本地托管的镜像。例如:include: - template: Auto-DevOps.gitlab-ci.yml variables: REGISTRY_URL: "registry.gitlab.example" build: image: "$REGISTRY_URL/docker/auto-build-image:v0.6.0" services: - name: "$REGISTRY_URL/greg/docker/docker:20.10.16-dind" command: ['--tls=false', '--host=tcp://0.0.0.0:2375']
PostgreSQL 数据库支持
{{< alert type=”warning” >}}
默认情况下,Provisioning PostgreSQL 数据库在极狐GitLab 15.8 中弃用,并且从 16.0 开始将不再是默认值。要启用数据库供应,请设置相关的 CI/CD 变量。
{{< /alert >}}
为了支持需要数据库的应用程序,PostgreSQL 默认被供应。访问数据库的凭据是预配置的。
要自定义凭据,请设置相关的 CI/CD 变量。您还可以定义一个自定义 DATABASE_URL
:
postgres://user:password@postgres-host:postgres-port/postgres-database
升级 PostgreSQL
极狐GitLab 使用 chart 版本 8.2.1 默认供应 PostgreSQL。您可以设置版本从 0.7.1 到 8.2.1。
如果您使用的是旧的 chart 版本,您应该 迁移您的数据库 到较新的 PostgreSQL。
控制默认供应的 PostgreSQL 的 CI/CD 变量 AUTO_DEVOPS_POSTGRES_CHANNEL
在极狐GitLab 13.0 中更改为 2
。要使用旧的 PostgreSQL,请将 AUTO_DEVOPS_POSTGRES_CHANNEL
变量设置为 1
。
自定义 PostgreSQL Helm Chart 的值
要设置自定义值,请执行以下操作之一:
- 将名为
.gitlab/auto-deploy-postgres-values.yaml
的文件添加到您的存储库。如果找到,此文件会自动使用。此文件默认用于 PostgreSQL Helm 升级。 - 将具有不同名称或路径的文件添加到存储库,并使用路径和名称设置
POSTGRES_HELM_UPGRADE_VALUES_FILE
环境变量。 - 设置
POSTGRES_HELM_UPGRADE_EXTRA_ARGS
环境变量。
使用外部 PostgreSQL 数据库提供商
Auto DevOps 为生产环境提供了对 PostgreSQL 容器的开箱即用支持。然而,您可能希望使用像 AWS Relational Database Service 这样的外部托管提供商。
要使用外部托管提供商:
-
使用环境范围的 CI/CD 变量 禁用所需环境的内置 PostgreSQL 安装。因为内置的 PostgreSQL 设置对于审核应用和分阶段是足够的,您可能只需要禁用
生产
的安装。 -
将
DATABASE_URL
变量定义为可用于您的应用程序的环境范围变量。此应为以下格式的 URL:postgres://user:password@postgres-host:postgres-port/postgres-database
-
确保您的 Kubernetes 集群具有网络访问权限到 PostgreSQL 所托管的地方。