- Auto DevOps 横幅
- 自定义构建包
- 自定义
Dockerfile
- 将参数传递给
docker build
- 自定义容器镜像
- 将 CI/CD 变量转发到构建环境
- 自定义 Helm Chart
- 自定义 Helm Chart 的值
- 自定义
helm upgrade
命令 - 分环境自定义 Helm chart
-
自定义
.gitlab-ci.yml
- 自定义 Kubernetes 命名空间
- 使用托管在本地 Docker 镜像库中的镜像
- PostgreSQL 数据库支持
自定义 Auto DevOps
您可以根据所需自定义 Auto DevOps 的组件。比如,您可以:
- 添加自定义 buildpacks、Dockerfiles 和 Helm charts。
- 使用自定义 CI/CD 配置 启用 staging 和金丝雀部署。
- 使用 极狐GitLab API 扩展 Auto DevOps。
Auto DevOps 横幅
当未启用 Auto DevOps 时,具有维护者或更高权限的用户会看到一个横幅:
横幅可以在以下情况下被禁用:
- 用户自己关闭。
- 项目显式禁用 Auto DevOps。
- 整个极狐GitLab 实例禁用 Auto DevOps。
-
管理员通过在 Rails 控制台上运行如下命令:
Feature.enable(:auto_devops_banner_disabled)
-
通过极狐GitLab API(使用管理员访问令牌):
curl --data "value=true" --header "PRIVATE-TOKEN: <personal_access_token>" "https://gitlab.example.com/api/v4/features/auto_devops_banner_disabled"
-
自定义构建包
发生以下情况,您可以自定义 buildpacks:
- 如果您的项目的 buildpacks 检测失败。
- 您需要对构建进行更多控制。
使用 Cloud Native Buildpacks 自定义构建包
指定以下二者之一:
- 具有任何
pack
的 URI 规范格式的 CI/CD 变量BUILDPACK_URL
。 - 一个
project.toml
项目描述符,其中包含您想要包含的构建包。
多个构建包
Auto DevOps 不完全支持使用多个构建包,因为 Auto Test 不能使用 .buildpacks
文件。后端用于解析 .buildpacks
文件的构建包 heroku-buildpack-multi 没有提供必要的命令 bin/test-compile
和 bin/test
。
如果您的目标是仅使用单个自定义构建包,则应提供项目 CI/CD 变量BUILDPACK_URL
。
自定义 Dockerfile
对
DOCKERFILE_PATH
的支持引入于 13.2 版本。
如果您的项目在项目仓库的根目录中有一个 Dockerfile
,Auto DevOps 会基于 Dockerfile 构建一个 Docker 镜像,而不是使用构建包。
这可以更快并产生更小的镜像,特别是如果您的 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 # ... put your stuff here
如果您需要传递复杂的值,例如换行符和空格,请使用 Base64 编码。由于 Auto DevOps 使用参数的方式,这些未编码的复杂值可能会导致转义问题。
自定义容器镜像
默认情况下,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: <your-image-repository>
CI_APPLICATION_TAG: <the-tag>
将 CI/CD 变量转发到构建环境
可以使用 AUTO_DEVOPS_BUILD_IMAGE_FORWARDED_CI_VARIABLES
CI/CD 变量将 CI/CD 变量转发到构建环境。转发的变量应在逗号分隔列表中按名称指定。例如,要转发变量 CI_COMMIT_SHA
和 CI_ENVIRONMENT_NAME
,请将 AUTO_DEVOPS_BUILD_IMAGE_FORWARDED_CI_VARIABLES
设置为 CI_COMMIT_SHA,CI_ENVIRONMENT_NAME
。
- 使用构建包时,转发的变量会自动作为环境变量使用。
-
使用
Dockerfile
时,需要执行以下附加步骤:-
通过将以下代码添加到文件顶部来激活实验性
Dockerfile
语法:# syntax = docker/dockerfile:experimental
-
要在
Dockerfile
中的任何RUN $COMMAND
中提供 secret,请在运行$COMMAND
之前挂载 secret 文件并获取它: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,使您能够准确控制应用程序的部署方式。 -
项目变量 - 使用要使用的自定义 chart 的 URL 创建一个项目 CI/CD 变量
AUTO_DEVOPS_CHART
。您还可以创建五个项目变量:-
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_UPGRADE_VALUES_FILE
CI/CD 变量。
某些值不能被上述选项覆盖。像 replicaCount
这样的设置应该被 REPLICAS
构建和部署 CI/CD 变量覆盖。
HELM_UPGRADE_EXTRA_ARGS
变量通过将 HELM_UPGRADE_EXTRA_ARGS
设置为 --values <my-values.yaml>
来覆盖默认 chart 值。自定义 helm upgrade
命令
auto-deploy-image
使用 helm upgrade
命令。要自定义此命令,使用 HELM_UPGRADE_EXTRA_ARGS
CI/CD 变量。
比如,当运行 helm upgrade
时,要禁用预(pre-)和后(post-)升级钩子,运行:
variables:
HELM_UPGRADE_EXTRA_ARGS: --no-hooks
分环境自定义 Helm chart
您可以通过将 CI/CD 变量限定为所需环境来指定每个环境使用的自定义 Helm chart。请参阅限制 CI/CD 变量的环境范围。
自定义 .gitlab-ci.yml
Auto DevOps 是完全可定制的,因为 Auto DevOps 模板只是 .gitlab-ci.yml
文件的实现,并且仅使用可用于任何 .gitlab-ci.yml
实现的功能。
要修改 Auto DevOps 使用的 CI/CD 流水线,include
模板,并根据需要添加 .gitlab-ci.yml
文件到您的仓库的根目录,其中包含以下内容:
include:
- template: Auto-DevOps.gitlab-ci.yml
添加您的更改,您的添加将使用 include
描述的行为,与 Auto DevOps 模板合并。
如果需要专门删除部分文件,也可以复制粘贴 Auto DevOps 模板的内容到您的项目中,并根据需要进行编辑。
使用 Auto DevOps 的单独组件
如果您仅需要 Auto DevOps 提供的某些功能,可以将单独的 Auto DevOps 作业包含到您自己的 .gitlab-ci.yml
中。确保在您的 .gitlab-ci.yml
文件中定义每个作业所需的阶段。
比如,要使用自动构建,您可以将如下内容添加到 .gitlab-ci.yml
中:
stages:
- build
include:
- template: Jobs/Build.gitlab-ci.yml
自定义 Kubernetes 命名空间
在 14.5 及之前的版本,您可以使用 environment:kubernetes:namespace
为环境指定命名空间。
但是,此功能随基于证书的集成功能废弃。
您现在应该使用 KUBE_NAMESPACE
环境变量并限制它可用于的环境。
使用托管在本地 Docker 镜像库中的镜像
您可以配置许多 Auto DevOps 作业在离线环境中运行:
- 将所需的 Auto DevOps Docker 镜像从 Docker Hub 和
registry.gitlab.com
复制到其本地镜像库。 -
镜像托管并在本地镜像库中可用后,编辑
.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 Helm Chart 的值
要设置自定义值,请执行以下操作之一:
- 将名为
.gitlab/auto-deploy-postgres-values.yaml
的文件添加到您的仓库。如果找到,将自动使用此文件。该文件默认用于 PostgreSQL Helm 升级。 - 将具有不同名称或路径的文件添加到仓库,并使用路径和名称设置
POSTGRES_HELM_UPGRADE_VALUES_FILE
环境变量。 - 设置
POSTGRES_HELM_UPGRADE_EXTRA_ARGS
环境变量。
使用外部 PostgreSQL 数据库 providers
虽然 Auto DevOps 为生产环境的 PostgreSQL 容器提供了开箱即用的支持,但对于某些用例,它可能不够安全或有弹性,您可能希望使用外部托管 provider(例如 AWS 关系数据库 服务)用于 PostgreSQL。
您必须在项目的 CI/CD 设置中为 POSTGRES_ENABLED
和 DATABASE_URL
定义环境范围的 CI/CD 变量:
-
使用环境范围 CI/CD 变量将禁用所需环境的内置 PostgreSQL 安装。对于这个用例,很可能只有
production
必须添加到此列表中。Review Apps 和 staging 的内置 PostgreSQL 设置即可。 -
将
DATABASE_URL
变量定义为可用于您的应用程序的环境范围变量。这应该是以下格式的 URL:postgres://user:password@postgres-host:postgres-port/postgres-database
您必须确保您的 Kubernetes 集群可以通过网络访问托管 PostgreSQL 的任何位置。