GitLab CI如何在rules关键字前覆写流水线变量以复用通用部署规则
GitLab CI公共部署规则复用方案
这个需求完全可以实现,你之前写法的问题是不符合GitLab CI的变量定义语法,job级变量需要放在variables字段中声明。
方案1:兼容所有新版本的修正实现(符合你最初的设计思路)
GitLab CI在解析rules前会先加载当前job的variables配置,你只需要调整变量的声明位置即可:
.common_deploy_rules: rules: - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH when: never - if: $DEPLOY_NIGHTLY == "True" when: on_success - when: manual system1: extends: .common_deploy_rules stage: deploy variables: DEPLOY_NIGHTLY: $DEPLOY_SYSTEM_1 script: - <deploy_system.sh 1> system2: extends: .common_deploy_rules stage: deploy variables: DEPLOY_NIGHTLY: $DEPLOY_SYSTEM_2 script: - <deploy_system.sh 2>
这个方案兼容GitLab 13.0及以上所有版本,规则逻辑完全复用,不需要重复编写。
方案2:更简洁的矩阵部署方案(推荐GitLab 14.3+版本使用)
如果你的GitLab版本支持动态变量解析,可以直接用并行矩阵配置,连重复的job定义都可以省略:
deploy_all_systems: stage: deploy parallel: matrix: - SYSTEM_ID: ["1", "2"] rules: - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH when: never - if: $[DEPLOY_SYSTEM_${SYSTEM_ID}] == "True" when: on_success - when: manual script: - <deploy_system.sh $SYSTEM_ID>
后续新增部署系统时,只需要往SYSTEM_ID的数组中添加新的系统ID即可,维护成本更低。
内容的提问来源于stack exchange,提问作者Dash
相关产品推荐
相关产品推荐

