使用 CI/CD 变量来设置自动 DevOps 域名,提供自定义 Helm chart 或扩展您的应用程序。

构建和部署变量

使用这些变量来自定义和部署您的构建。

CI/CD 变量 描述
ADDITIONAL_HOSTS 完全限定域名,以逗号分隔的列表格式添加到 Ingress 主机。
<ENVIRONMENT>_ADDITIONAL_HOSTS 对于特定环境,完全限定域名,以逗号分隔的列表格式添加到 Ingress 主机。这将优先于 ADDITIONAL_HOSTS
AUTO_BUILD_IMAGE_VERSION 自定义用于 build 作业的镜像版本。
AUTO_DEPLOY_IMAGE_VERSION 自定义用于 Kubernetes 部署作业的镜像版本。
AUTO_DEVOPS_ATOMIC_RELEASE 自动 DevOps 默认使用 --atomic 进行 Helm 部署。设置此变量为 false 以禁用 --atomic 的使用。
AUTO_DEVOPS_BUILD_IMAGE_CNB_BUILDER 构建时使用的 Cloud Native Buildpacks 构建器。默认构建器为 heroku/buildpacks:22更多详情
AUTO_DEVOPS_BUILD_IMAGE_EXTRA_ARGS 传递给 docker build 命令的额外参数。使用引号不能阻止单词拆分。更多详情
AUTO_DEVOPS_BUILD_IMAGE_FORWARDED_CI_VARIABLES 以逗号分隔的 CI/CD 变量名称列表,转发到构建环境(buildpack 构建器或 docker build)。
AUTO_DEVOPS_BUILD_IMAGE_CNB_PORT 在极狐GitLab 15.0 及之后,由生成的 Docker 镜像暴露的端口。设置为 false 以阻止暴露任何端口。默认端口为 5000
AUTO_DEVOPS_BUILD_IMAGE_CONTEXT 用于设置 Dockerfile 和 Cloud Native Buildpacks 的构建上下文目录。默认为根目录。
AUTO_DEVOPS_CHART 用于部署应用的 Helm Chart。
AUTO_DEVOPS_CHART_REPOSITORY 用于搜索 charts 的 Helm Chart 仓库。默认为 https://charts.gitlab.io
AUTO_DEVOPS_CHART_REPOSITORY_NAME 用于设置 Helm 仓库的名称。默认为 gitlab
AUTO_DEVOPS_CHART_REPOSITORY_USERNAME 用于设置连接 Helm 仓库的用户名。默认为无凭据。还需设置 AUTO_DEVOPS_CHART_REPOSITORY_PASSWORD
AUTO_DEVOPS_CHART_REPOSITORY_PASSWORD 用于设置连接 Helm 仓库的密码。默认为无凭据。还需设置 AUTO_DEVOPS_CHART_REPOSITORY_USERNAME
AUTO_DEVOPS_CHART_REPOSITORY_PASS_CREDENTIALS 设置为非空值以启用 Helm 仓库凭据转发到 chart 服务器,当 chart 产物与仓库位于不同主机时。
AUTO_DEVOPS_CHART_REPOSITORY_INSECURE 设置为非空值以在 Helm 命令中添加 --insecure-skip-tls-verify 参数。默认情况下,Helm 使用 TLS 验证。
AUTO_DEVOPS_CHART_CUSTOM_ONLY 设置为非空值以仅使用自定义 chart。默认情况下,从极狐GitLab 下载最新 chart。
AUTO_DEVOPS_CHART_VERSION 设置部署 chart 的版本。默认为最新可用版本。
AUTO_DEVOPS_COMMON_NAME 从极狐GitLab 15.5 开始,设置为有效域名,以自定义 TLS 证书使用的通用名称。默认为 le-$CI_PROJECT_ID.$KUBE_INGRESS_BASE_DOMAIN。设置为 false 不在 Ingress 上设置此替代主机。
AUTO_DEVOPS_DEPLOY_DEBUG 如果此变量存在,Helm 输出调试日志。
AUTO_DEVOPS_ALLOW_TO_FORCE_DEPLOY_V<N> 从 auto-deploy-image v1.0.0 开始,如果此变量存在,强制部署新的主要版本 chart。更多信息,请参阅忽略警告并继续部署
BUILDPACK_URL 完整的 Buildpack URL。必须指向 Pack 支持的 URL
CANARY_ENABLED 用于定义 金丝雀环境的部署策略
BUILDPACK_VOLUMES 指定一个或多个 要挂载的 Buildpack 卷。使用管道 | 作为列表分隔符。
CANARY_PRODUCTION_REPLICAS 在生产环境中为金丝雀部署部署的金丝雀副本数量。优先于 CANARY_REPLICAS。默认值为 1。
CANARY_REPLICAS 金丝雀部署部署的金丝雀副本数量。默认值为 1。
CI_APPLICATION_REPOSITORY 正在构建或部署的容器镜像的仓库,$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG。更多详情,请阅读自定义容器镜像
CI_APPLICATION_TAG 正在构建或部署的容器镜像的标签,$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG。更多详情,请阅读自定义容器镜像
DAST_AUTO_DEPLOY_IMAGE_VERSION 自定义用于默认分支上的 DAST 部署的镜像版本。通常应与 AUTO_DEPLOY_IMAGE_VERSION 相同。
DOCKERFILE_PATH 允许覆盖构建阶段的默认 Dockerfile 路径
HELM_RELEASE_NAME 允许覆盖 helm 发布名称。可以用于在一个命名空间中部署多个项目时分配唯一的发布名称。
HELM_UPGRADE_VALUES_FILE 允许覆盖 helm upgrade 值文件。默认为 .gitlab/auto-deploy-values.yaml
HELM_UPGRADE_EXTRA_ARGS 在部署应用程序时允许在 helm upgrade 命令中添加额外选项。使用引号不能阻止单词拆分。
INCREMENTAL_ROLLOUT_MODE 如果存在,可以用于启用生产环境的增量发布。设置为 manual 用于手动部署作业,或设置为 timed 用于自动发布部署,每次延迟 5 分钟。
K8S_SECRET_* 任何以 K8S_SECRET_ 前缀开头的变量由自动 DevOps 作为环境变量提供给部署的应用程序。
KUBE_CONTEXT 可以用于选择要使用的 KUBECONFIG 上下文。当 KUBE_CONTEXT 为空时,使用 KUBECONFIG 中的默认上下文(如果有)。与 Kubernetes 代理一起使用时必须选择一个上下文。
KUBE_INGRESS_BASE_DOMAIN 可以用于设置每个集群的域名。有关更多信息,请参阅集群域名
KUBE_NAMESPACE 用于部署的命名空间。当使用基于证书的集群时,此值不应直接覆盖
KUBECONFIG 用于部署的 kubeconfig。用户提供的值优先于极狐GitLab提供的值。
PRODUCTION_REPLICAS 在生产环境中部署的副本数量。优先于 REPLICAS,默认值为 1。对于零停机升级,设置为 2 或更高。
REPLICAS 部署的副本数量。默认值为 1。更改此变量而不是修改 replicaCount
ROLLOUT_RESOURCE_TYPE 在使用自定义 Helm chart 时允许指定正在部署的资源类型。默认值为 deployment
ROLLOUT_STATUS_DISABLED 用于禁用 rollout 状态检查,因为它不支持所有资源类型,例如 cronjob
STAGING_ENABLED 用于定义测试和生产环境的部署策略
TRACE 设置为任意值使 Helm 命令产生详细输出。您可以使用此设置来帮助诊断自动 DevOps 部署问题。

数据库变量

{{< alert type=”warning” >}}

从 极狐GitLab 16.0 开始,POSTGRES_ENABLED 不再默认设置。

{{< /alert >}}

使用这些变量将 CI/CD 与 PostgreSQL 数据库集成。

CI/CD 变量 描述
DB_INITIALIZE 用于指定要运行的命令以初始化应用程序的 PostgreSQL 数据库。运行在应用程序 pod 内。
DB_MIGRATE 用于指定要运行的命令以迁移应用程序的 PostgreSQL 数据库。运行在应用程序 pod 内。
POSTGRES_ENABLED 是否启用 PostgreSQL。设置为 true 以启用自动部署 PostgreSQL。
POSTGRES_USER PostgreSQL 用户。默认为 user。设置它以使用自定义用户名。
POSTGRES_PASSWORD PostgreSQL 密码。默认为 testing-password。设置它以使用自定义密码。
POSTGRES_DB PostgreSQL 数据库名称。默认为 $CI_ENVIRONMENT_SLUG 的值。设置它以使用自定义数据库名称。
POSTGRES_VERSION 要使用的 postgres Docker 镜像 的标签。默认为 9.6.16 用于测试和部署。如果 AUTO_DEVOPS_POSTGRES_CHANNEL 设置为 1,部署使用默认版本 9.6.2
POSTGRES_HELM_UPGRADE_VALUES_FILE 使用 auto-deploy-image v2 时,此变量允许覆盖 PostgreSQL 的 helm upgrade 值文件。默认为 .gitlab/auto-deploy-postgres-values.yaml
POSTGRES_HELM_UPGRADE_EXTRA_ARGS 使用 auto-deploy-image v2 时,此变量允许在部署应用程序时在 helm upgrade 命令中添加额外的 PostgreSQL 选项。使用引号不能阻止单词拆分。
POSTGRES_CHART_REPOSITORY 用于搜索 PostgreSQL chart 的 Helm Chart 仓库。默认为 https://raw.githubusercontent.com/bitnami/charts/eb5f9a9513d987b519f0ecd732e7031241c50328/bitnami
POSTGRES_CHART_VERSION PostgreSQL chart 使用的 Helm Chart 版本。默认为 8.2.1

作业跳过变量

使用这些变量来跳过特定类型的 CI/CD 作业。当被跳过时,CI/CD 作业不会被创建或运行。

作业名称 CI/CD 变量 极狐GitLab 版本 描述
.fuzz_base COVFUZZ_DISABLED   阅读更多 关于如何 .fuzz_base 为您自己的作业提供能力。如果值为 "true",则不会创建作业。
apifuzzer_fuzz API_FUZZING_DISABLED   如果值为 "true",则不会创建作业。
build BUILD_DISABLED   如果变量存在,则不会创建作业。
build_artifact BUILD_DISABLED   如果变量存在,则不会创建作业。
brakeman-sast SAST_DISABLED   如果值为 "true",则不会创建作业。
canary CANARY_ENABLED   此手动作业如果变量存在则被创建。
code_intelligence CODE_INTELLIGENCE_DISABLED   如果变量存在,则不会创建作业。
code_quality CODE_QUALITY_DISABLED   如果值为 "true",则不会创建作业。
container_scanning CONTAINER_SCANNING_DISABLED   如果值为 "true",则不会创建作业。
dast DAST_DISABLED   如果值为 "true",则不会创建作业。
dast_environment_deploy DAST_DISABLED_FOR_DEFAULT_BRANCH or DAST_DISABLED   如果值为 "true",则不会创建作业。
dependency_scanning DEPENDENCY_SCANNING_DISABLED   如果值为 "true",则不会创建作业。
flawfinder-sast SAST_DISABLED   如果值为 "true",则不会创建作业。
gemnasium-dependency_scanning DEPENDENCY_SCANNING_DISABLED   如果值为 "true",则不会创建作业。
gemnasium-maven-dependency_scanning DEPENDENCY_SCANNING_DISABLED   如果值为 "true",则不会创建作业。
gemnasium-python-dependency_scanning DEPENDENCY_SCANNING_DISABLED   如果值为 "true",则不会创建作业。
kubesec-sast SAST_DISABLED   如果值为 "true",则不会创建作业。
license_management LICENSE_MANAGEMENT_DISABLED 极狐GitLab 12.7 及更早版本 如果变量存在,则不会创建作业。作业已从极狐GitLab 12.8 废弃
license_scanning LICENSE_MANAGEMENT_DISABLED   如果值为 "true",则不会创建作业。作业已从极狐GitLab 15.9废弃
load_performance LOAD_PERFORMANCE_DISABLED   如果变量存在,则不会创建作业。
nodejs-scan-sast SAST_DISABLED   如果值为 "true",则不会创建作业。
performance PERFORMANCE_DISABLED 极狐GitLab 13.12 及更早版本 浏览器性能。如果变量存在,则不会创建作业。由 browser_performance 取代。
browser_performance BROWSER_PERFORMANCE_DISABLED   浏览器性能。如果变量存在,则不会创建作业。取代 performance
phpcs-security-audit-sast SAST_DISABLED   如果值为 "true",则不会创建作业。
pmd-apex-sast SAST_DISABLED   如果值为 "true",则不会创建作业。
review REVIEW_DISABLED   如果变量存在,则不会创建作业。
review:stop REVIEW_DISABLED   手动作业。如果变量存在,则不会创建作业。
secret_detection SECRET_DETECTION_DISABLED   如果值为 "true",则不会创建作业。
secret_detection_default_branch SECRET_DETECTION_DISABLED   如果值为 "true",则不会创建作业。
semgrep-sast SAST_DISABLED   如果值为 "true",则不会创建作业。
sobelow-sast SAST_DISABLED   如果值为 "true",则不会创建作业。
stop_dast_environment DAST_DISABLED_FOR_DEFAULT_BRANCH or DAST_DISABLED   如果值为 "true",则不会创建作业。
spotbugs-sast SAST_DISABLED   如果值为 "true",则不会创建作业。
test TEST_DISABLED   如果变量存在,则不会创建作业。
staging STAGING_ENABLED   如果变量存在,则会创建作业。
stop_review REVIEW_DISABLED   如果变量存在,则不会创建作业。

配置应用程序密钥变量

某些已部署的应用程序需要访问密钥变量。自动 DevOps 检测以 K8S_SECRET_ 开头的 CI/CD 变量,并将它们作为环境变量提供给已部署的应用程序。

前提条件:

  • 变量值必须是单行。

要配置密钥变量:

  1. 在左侧边栏,选择 搜索或前往 并找到您的项目。
  2. 选择 设置 > CI/CD
  3. 展开 变量
  4. 创建一个以 K8S_SECRET_ 前缀开头的 CI/CD 变量。例如,您可以创建一个名为 K8S_SECRET_RAILS_MASTER_KEY 的变量。
  5. 运行一个自动 DevOps 流水线,可以通过手动创建新的流水线或推送代码更改到极狐GitLab。

Kubernetes 密钥

自动 DevOps 流水线使用您的应用程序密钥变量来填充 Kubernetes 密钥。此密钥是每个环境唯一的。在部署您的应用程序时,密钥作为环境变量加载到运行应用程序的容器中。例如,如果您创建了一个名为 K8S_SECRET_RAILS_MASTER_KEY 的密钥,您的 Kubernetes 密钥可能看起来像这样:

$ kubectl get secret production-secret -n minimal-ruby-app-54 -o yaml

apiVersion: v1
data:
  RAILS_MASTER_KEY: MTIzNC10ZXN0
kind: Secret
metadata:
  creationTimestamp: 2018-12-20T01:48:26Z
  name: production-secret
  namespace: minimal-ruby-app-54
  resourceVersion: "429422"
  selfLink: /api/v1/namespaces/minimal-ruby-app-54/secrets/production-secret
  uid: 57ac2bfd-03f9-11e9-b812-42010a9400e4
type: Opaque

更新应用程序密钥

环境变量在 Kubernetes pod 中通常是不可变的。如果您更新了应用程序密钥,然后手动创建了一个新的流水线,正在运行的应用程序不会接收到更新后的密钥。

要更新应用程序密钥,可以选择:

  • 推送代码更新到极狐GitLab,强制 Kubernetes 部署重新创建 pod。
  • 手动删除正在运行的 pod,导致 Kubernetes 创建新的 pod 并更新密钥。

由于自动 DevOps 脚本环境的限制,不支持具有多行值的变量。

配置副本变量

当您想要扩展部署时,添加副本变量:

  1. 添加副本变量作为项目 CI/CD 变量
  2. 要扩展您的应用程序,请重新部署它。

    {{< alert type=”warning” >}}

    不要直接使用 Kubernetes 扩展您的应用程序。Helm 可能无法检测到更改,而后续使用自动 DevOps 的部署可能会撤销您的更改。

    {{< /alert >}}

自定义副本变量

您可以创建格式为 <TRACK>_<ENV>_REPLICAS 的自定义副本变量:

  • <TRACK> 是在 Helm Chart 应用定义中设置的 track Kubernetes 标签 的全大写值。如果未设置 track,则从自定义变量中省略 <TRACK>
  • <ENV> 是在 .gitlab-ci.yml 中设置的部署作业的全大写环境名称。

例如,如果环境是 qa 且轨迹是 foo,请创建一个名为 FOO_QA_REPLICAS 的环境变量:

QA testing:
  stage: deploy
  environment:
    name: qa
  script:
    - deploy foo

应用程序的 Helm chart 中必须定义轨迹 foo。例如:

replicaCount: 1
image:
  repository: gitlab.example.com/group/project
  tag: stable
  pullPolicy: Always
  secrets:
    - name: gitlab-registry
application:
  track: foo
  tier: web
service:
  enabled: true
  name: web
  type: ClusterIP
  url: http://my.host.com/
  externalPort: 5000
  internalPort: 5000

测试和生产环境的部署策略

自动 DevOps 通常使用持续部署,并在默认分支上运行新的流水线时自动推送到 production 环境。要手动部署到生产环境,您可以使用 STAGING_ENABLED CI/CD 变量。

如果您设置 STAGING_ENABLED,极狐GitLab 会自动将应用程序部署到 staging 环境。当您准备好部署到生产环境时,极狐GitLab 会创建一个 production_manual 作业。

您还可以在项目设置中启用手动部署。

金丝雀环境的部署策略

{{< details >}}

  • 等级:专业版,旗舰版
  • 提供:JihuLab.com,私有化部署

{{< /details >}}

您可以在将任何更改部署到生产之前使用 金丝雀环境

如果您设置 CANARY_ENABLED,极狐GitLab 会创建两个手动作业

  • canary - 将应用程序部署到金丝雀环境。
  • production_manual - 将应用程序部署到生产环境。

生产环境的增量发布

{{< details >}}

  • 等级:专业版,旗舰版
  • 提供:JihuLab.com,私有化部署

{{< /details >}}

使用增量发布来持续部署您的应用程序,从仅几个 pod 开始。您可以手动增加 pod 的数量。

您可以在项目设置中启用手动部署,或者通过设置 INCREMENTAL_ROLLOUT_MODEmanual

如果您将 INCREMENTAL_ROLLOUT_MODE 设置为 manual,极狐GitLab 会创建四个手动作业:

  1. rollout 10%
  2. rollout 25%
  3. rollout 50%
  4. rollout 100%

百分比基于 REPLICAS CI/CD 变量,并定义用于部署的 pod 数量。例如,如果值为 10 并且您运行 10% rollout 作业,您的应用程序将仅部署到一个 pod。

您可以按任意顺序运行 rollout 作业。要缩减规模,请重新运行较低百分比的作业。

在您运行 rollout 100% 作业后,您无法缩减规模,必须回滚您的部署

示例增量发布配置

没有 INCREMENTAL_ROLLOUT_MODE 且没有 STAGING_ENABLED

测试和发布已禁用

没有 INCREMENTAL_ROLLOUT_MODE 且有 STAGING_ENABLED

测试已启用

设置 INCREMENTAL_ROLLOUT_MODEmanual 且没有 STAGING_ENABLED

发布已启用

设置 INCREMENTAL_ROLLOUT_MODEmanual 且有 STAGING_ENABLED

发布和测试已启用

生产环境的定时增量发布

{{< details >}}

  • 等级:专业版,旗舰版
  • 提供:JihuLab.com, 私有化部署

{{< /details >}}

使用定时增量发布来持续部署您的应用程序,从仅几个 pod 开始。

您可以在项目设置中启用定时增量部署,或者通过设置 INCREMENTAL_ROLLOUT_MODE CI/CD 变量为 timed

如果您将 INCREMENTAL_ROLLOUT_MODE 设置为 timed,极狐GitLab 会创建四个作业:

  1. timed rollout 10%
  2. timed rollout 25%
  3. timed rollout 50%
  4. timed rollout 100%

每个作业之间有五分钟的延迟。