自定义 Auto DevOps
- 版本:Free, Premium, Ultimate
- 提供:GitLab.com, GitLab Self-Managed, GitLab Dedicated
您可以自定义 Auto DevOps 的组件以满足您的需求。例如,您可以:
- 添加自定义的 buildpacks、Dockerfiles 和 Helm charts。
- 使用自定义的 CI/CD 配置 启用暂存和金丝雀部署。
- 通过 GitLab API 扩展 Auto DevOps。
Auto DevOps 横幅
当 Auto DevOps 未启用时,至少具有 Maintainer 角色的用户会看到横幅:
横幅可以在以下情况下被禁用:
- 用户自行关闭时。
- 项目层面,通过明确禁用 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"
-
自定义 buildpacks
在以下情况下,您可以自定义 buildpacks:
- 自动 buildpack 检测对您的项目失败时。
- 您需要更好地控制构建过程时。
使用 Cloud Native Buildpacks 自定义 buildpacks
指定以下任一选项:
- CI/CD 变量
BUILDPACK_URL,使用pack的 URI 规范格式 中的任意一种。 - 包含您想要包含的 buildpacks 的
project.toml项目描述符。
多个 buildpacks
由于 Auto Test 无法使用 .buildpacks 文件,Auto DevOps 不支持多个 buildpacks。在后台用于解析 .buildpacks 文件的 buildpack heroku-buildpack-multi 不提供必要的命令 bin/test-compile 和 bin/test。
要使用单个自定义 buildpack,您应该提供项目 CI/CD 变量 BUILDPACK_URL。
自定义 Dockerfiles
如果您的项目仓库根目录中有 Dockerfile,Auto DevOPS 会基于该 Dockerfile 构建 Docker 镜像。这比使用 buildpack 更快。如果您的 Dockerfile 基于 Alpine,还可以生成更小的镜像。
如果您设置了 DOCKERFILE_PATH CI/CD 变量,Auto Build 会在该位置查找 Dockerfile。
向 docker build 传递参数
您可以使用 AUTO_DEVOPS_BUILD_IMAGE_EXTRA_ARGS 项目 CI/CD 变量向 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 # 在此处包含您的内容
对于包含空格和换行符等复杂值,请使用 Base64 编码。复杂且未编码的值可能导致字符转义问题。
不要将密钥作为 Docker 构建参数传递。密钥可能会保留在您的镜像中。有关更多信息,请参阅关于密钥最佳实践的讨论。
自定义容器镜像
默认情况下,Auto Deploy 部署由 Auto Build 构建并推送到 GitLab 注册表的容器镜像。您可以通过定义特定变量来覆盖此行为:
| 条目 | 默认值 | 可被覆盖 |
|---|---|---|
| 镜像路径 | 分支流水线为 $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_SLUG。标签流水线为 $CI_REGISTRY_IMAGE。 |
$CI_APPLICATION_REPOSITORY |
| 镜像标签 | 分支流水线为 $CI_COMMIT_SHA。标签流水线为 $CI_COMMIT_TAG。 |
$CI_APPLICATION_TAG |
这些变量也会影响 Auto Build 和 Auto Container Scanning。如果您不想构建并推送镜像到 $CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG,只需包含 Jobs/Deploy.gitlab-ci.yml,或跳过 build 作业。
如果您使用 Auto Container Scanning 并设置了 $CI_APPLICATION_REPOSITORY 的值,那么您也应该更新 $CS_DEFAULT_BRANCH_IMAGE。有关更多信息,请参阅设置默认分支镜像。
以下是您的 .gitlab-ci.yml 中的示例设置:
variables:
CI_APPLICATION_REPOSITORY: <您的镜像仓库>
CI_APPLICATION_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如果您使用 buildpacks,转发的变量会自动作为环境变量可用。
如果您使用 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.yaml文件的./chart目录,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 值
要覆盖默认 Helm chart 中 values.yaml 文件的默认值,可以:
- 在您的仓库中添加一个名为
.gitlab/auto-deploy-values.yaml的文件。此文件默认用于 Helm 升级。 - 在仓库中添加一个不同名称或路径的文件。使用
HELM_UPGRADE_VALUES_FILECI/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 文件中定义每个作业所需的阶段。
例如,要使用 Auto Build,可以在您的 .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 registry 中托管的镜像
您可以将许多 Auto DevOps 作业配置为在离线环境中运行:
-
将所需的 Auto DevOps Docker 镜像从 Docker Hub 和
registry.gitlab.com复制到本地 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 数据库支持
为需要数据库的应用程序提供支持,默认会配置 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 设置足够,您可能只需要为
production禁用安装。 -
将
DATABASE_URL变量定义为对您的应用程序可用的环境范围变量。这应该是以下格式的 URL:postgres://user:password@postgres-host:postgres-port/postgres-database -
确保您的 Kubernetes 集群可以访问 PostgreSQL 托管位置的网络。