{{< details >}}

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

{{< /details >}}

您可以自定义 Auto DevOps 的组件以满足您的需求。例如,您可以:

Auto DevOps 横幅

当 Auto DevOps 未启用时,至少具有维护者角色的用户会看到一个横幅:

Auto DevOps banner

可以为以下对象禁用横幅:

  • 用户,当他们自己关闭横幅时。
  • 项目,通过明确 禁用 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-compilebin/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_ARGSdocker build 传递参数。

例如,要构建基于 ruby:alpine 而不是默认的 ruby:latest 的 Docker 镜像:

  1. AUTO_DEVOPS_BUILD_IMAGE_EXTRA_ARGS 设置为 --build-arg=RUBY_VERSION=alpine
  2. 将以下内容添加到自定义 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 配置:

转发 CI/CD 变量到构建环境

要将 CI/CD 变量转发到构建环境,请将您想要转发的变量名称添加到 AUTO_DEVOPS_BUILD_IMAGE_FORWARDED_CI_VARIABLES CI/CD 变量中。用逗号分隔多个变量。

例如,要转发变量 CI_COMMIT_SHACI_ENVIRONMENT_NAME

variables:
  AUTO_DEVOPS_BUILD_IMAGE_FORWARDED_CI_VARIABLES: CI_COMMIT_SHA,CI_ENVIRONMENT_NAME

如果您使用构建包,转发的变量会自动作为环境变量可用。

如果您使用 Dockerfile:

  1. 要激活实验性 Dockerfile 语法,请将以下内容添加到您的 Dockerfile 中:

    # syntax = docker/dockerfile:experimental
    
  2. 要在 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 流水线添加自定义行为:

  1. 在您的存储库根目录中添加一个 .gitlab-ci.yml 文件,内容如下:

    include:
      - template: Auto-DevOps.gitlab-ci.yml
    
  2. 将您的更改添加到 .gitlab-ci.yml 文件中。您的更改将与 Auto DevOps 模板合并。有关 include 如何合并您的更改的更多信息,请参阅 include 文档

要从 Auto DevOps 流水线中移除行为:

  1. Auto DevOps 模板 复制到您的项目中。
  2. 根据需要编辑您复制的模板。

使用 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 任务在 离线环境 中运行:

  1. 从 Docker Hub 和 registry.gitlab.com 复制所需的 Auto DevOps Docker 镜像到他们的本地极狐GitLab 容器注册表。
  2. 镜像在本地注册表中托管并可用后,编辑 .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 这样的外部托管提供商。

要使用外部托管提供商:

  1. 使用环境范围的 CI/CD 变量 禁用所需环境的内置 PostgreSQL 安装。因为内置的 PostgreSQL 设置对于审核应用和分阶段是足够的,您可能只需要禁用 生产 的安装。

    Auto Metrics

  2. DATABASE_URL 变量定义为可用于您的应用程序的环境范围变量。此应为以下格式的 URL:

    postgres://user:password@postgres-host:postgres-port/postgres-database
    
  3. 确保您的 Kubernetes 集群具有网络访问权限到 PostgreSQL 所托管的地方。