GitLab CI 支持通过 when: manual + variables 实现手动触发 Pipeline 并预填参数,变量需大写、字母数字下划线组合;敏感变量应在项目 Settings 中配置并掩码保护;支持 UI 输入或 API 调用传参,实现安全可控的多环境定制发布。

在 Linux 环境下,GitLab CI 支持通过手动触发 Pipeline(manual pipeline) + 预填充变量(prefilled variables)的方式,实现用户在触发时动态输入参数,从而驱动定制化发布流程。这不是运行时“交互式输入”,而是 GitLab UI 或 API 层面的变量预设机制,安全、可控、可审计。
启用手动触发并暴露变量输入框
关键在于使用 when: manual 和 variables 配合 trigger 或直接定义可手动启动的 job。GitLab 会自动为标记为 manual 的 job 渲染输入字段。
- 在
.gitlab-ci.yml中定义一个带when: manual的发布 job,并在variables下声明你希望用户填写的字段(如环境、版本号、配置标识) - 变量名需全大写、字母数字下划线组合(如
DEPLOY_ENV、RELEASE_VERSION),避免 shell 保留字(如PATH、HOME) - 示例:
deploy-manual: stage: deploy when: manual variables: DEPLOY_ENV: "staging" # 默认值,UI 中显示为可编辑输入框 RELEASE_VERSION: "" script: - echo "Deploying to $DEPLOY_ENV with version $RELEASE_VERSION" - ./scripts/deploy.sh --env "$DEPLOY_ENV" --version "$RELEASE_VERSION"
在项目设置中预定义敏感或常用变量(可选但推荐)
对于密码、Token、私钥等敏感值,或跨多个手动发布共用的基础配置(如镜像仓库地址),应不在 .gitlab-ci.yml 中硬编码,而是在 GitLab 项目 Settings → CI/CD → Variables 中添加:
- 勾选 Mask variable(掩码)防止日志泄露
- 勾选 Protected 限制仅在受保护分支上可用(如
main) - 变量名与
.gitlab-ci.yml中引用的一致(如DOCKER_REGISTRY_TOKEN),job 运行时自动注入 - 这样,用户只需填业务参数(环境、版本),安全凭据由系统自动补全
支持多环境一键切换的典型结构
你可以把不同目标环境抽象成一组变量组合,用单个手动 job 统一调度:
- 定义顶层
variables设置通用基础值(如APP_NAME、BASE_IMAGE) - 在 manual job 内部用
if-elif-else或外部脚本根据$DEPLOY_ENV加载对应配置文件(如config/staging.yaml、config/prod.yaml) - 也可以配合
only/except或rules控制某些变量只在特定环境下生效(例如生产环境要求RELEASE_VERSION非空且匹配语义化格式)
通过 API 触发并传参(适合集成到内部平台)
若需脱离 GitLab UI,从外部系统(如运维平台、审批系统)触发发布,可调用 GitLab Pipeline API:
- POST 到
/api/v4/projects/:id/pipeline - Body 包含:
{"ref": "main", "variables": [{"key":"DEPLOY_ENV","value":"prod"},{"key":"RELEASE_VERSION","value":"2.3.0"}]} - 配合 Personal Access Token 认证,实现审批后自动带参触发,全程无需人工介入 UI











