使用 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 变量,并将它们作为环境变量提供给已部署的应用程序。
前提条件:
- 变量值必须是单行。
要配置密钥变量:
- 在左侧边栏,选择 搜索或前往 并找到您的项目。
- 选择 设置 > CI/CD。
- 展开 变量。
- 创建一个以
K8S_SECRET_
前缀开头的 CI/CD 变量。例如,您可以创建一个名为K8S_SECRET_RAILS_MASTER_KEY
的变量。 - 运行一个自动 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 脚本环境的限制,不支持具有多行值的变量。
配置副本变量
当您想要扩展部署时,添加副本变量:
- 添加副本变量作为项目 CI/CD 变量。
-
要扩展您的应用程序,请重新部署它。
{{< 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_MODE
为 manual
。
如果您将 INCREMENTAL_ROLLOUT_MODE
设置为 manual
,极狐GitLab 会创建四个手动作业:
rollout 10%
rollout 25%
rollout 50%
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_MODE
为 manual
且没有 STAGING_ENABLED
:
设置 INCREMENTAL_ROLLOUT_MODE
为 manual
且有 STAGING_ENABLED
:
生产环境的定时增量发布
{{< details >}}
- 等级:专业版,旗舰版
- 提供:JihuLab.com, 私有化部署
{{< /details >}}
使用定时增量发布来持续部署您的应用程序,从仅几个 pod 开始。
您可以在项目设置中启用定时增量部署,或者通过设置 INCREMENTAL_ROLLOUT_MODE
CI/CD 变量为 timed
。
如果您将 INCREMENTAL_ROLLOUT_MODE
设置为 timed
,极狐GitLab 会创建四个作业:
timed rollout 10%
timed rollout 25%
timed rollout 50%
timed rollout 100%
每个作业之间有五分钟的延迟。