GitLab CI 无需手动输入向作业传递运行时选择参数的方案咨询
方案1:使用GitLab CI原生枚举型流水线变量(推荐)
GitLab 13.7及以上版本原生支持带可选值列表的参数化变量,完全匹配你的所有需求:
- 手动触发流水线时会自动生成下拉选择框,用户仅能从预定义列表中选值
- 变量可设为必填,无值时无法启动流水线
- 重跑流水线时参数会自动保留,无需重复输入
- 无需维护多个冗余init job,配置简洁
配置示例如下:
variables: # 定义可枚举的部署参数 INFRA_ID: description: "选择要部署的基础设施环境" # 预定义可选值列表,用户仅能从以下选项中选择 options: - "pr1" - "pr2" - "dev" - "stage1" - "stage2" # 留空表示强制用户选择,不设默认值 value: "" stages: - execute executor: stage: execute rules: # 仅当用户选择了INFRA_ID时才运行 - if: $INFRA_ID != "" when: always script: - echo "Selected infrastructure $INFRA_ID" # 后续部署逻辑直接调用$INFRA_ID即可
方案2:兼容低版本GitLab的按需触发方案
如果你使用的GitLab版本不支持枚举变量,可通过rules+needs组合实现单init触发对应执行job的效果,解决多init job阻塞后续阶段的问题:
stages: - init - execute # 抽离公共模板减少冗余代码 .init_template: stage: init when: manual script: - echo "INFRA_ID=$TARGET_INFRA" >> build.env artifacts: reports: dotenv: build.env init_pr1: extends: .init_template variables: TARGET_INFRA: "pr1" init_pr2: extends: .init_template variables: TARGET_INFRA: "pr2" init_dev: extends: .init_template variables: TARGET_INFRA: "dev" # 执行job根据已运行的init job动态匹配依赖 executor: stage: execute rules: - when: always # 设置为optional后仅依赖已手动触发运行的init job,无需等待同阶段其他未触发的job needs: - job: init_pr1 optional: true - job: init_pr2 optional: true - job: init_dev optional: true script: - echo "Selected infrastructure $INFRA_ID"
内容的提问来源于stack exchange,提问作者Márk Kalinovits
相关产品推荐
相关产品推荐

