yaml - 在规则关键字之前覆盖 gitlab-ci 管道变量
问题描述
我正在尝试使部署管道的 gitlab-ci 文件更加动态和智能。我有两个系统要部署不同的产品版本。对于每个系统,都不应该从功能分支进行部署,如果设置了 DEPLOY_SYSTEM_X 变量,它应该会自动运行。否则应该是手动触发。管道看起来像这样:
system1:
stage: deploy
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
when: never
- if: $DEPLOY_SYSTEM_1 == "True"
when: on_success
- when: manual
script:
- <deploy_system.sh 1>
system2:
stage: deploy
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
when: never
- if: $DEPLOY_SYSTEM_2 == "True"
when: on_success
- when: manual
script:
- <deploy_system.sh 2>
变量 DEPLOY_SYSTEM_X 在管道调度中设置。为了让它更性感一点,我想打破规则部分,因为它们对于系统非常相似。问题是我需要用 DEPLOY_SYSTEM_X 变量做一些聪明的事情。我正在考虑引入一个 DEPLOY_NIGHTLY 变量,我可以像这样在不同的工作中重新定义它
.common_rules:
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
when: never
- if: $DEPLOY_NIGHTLY == "True"
when: on_success
- when: manual
system1:
extends: .common_rules
stage: deploy
$DEPLOY_NIGHTLY = $DEPLOY_SYSTEM_1
script:
- <deploy_system.sh 1>
system2:
extends: .common_rules
stage: deploy
$DEPLOY_NIGHTLY = $DEPLOY_SYSTEM_2
script:
- <deploy_system.sh 2>
但这显然不起作用,因为我不能像那样分配 $DEPLOY_NIGHTLY 变量。这有可能实现吗?工作中有没有可以重新定义变量的地方?或者有没有更好的方法来做到这一点?
解决方案
推荐阅读
- android - 您的应用是否在面向 Android 9 (Pie) 或更早版本(SDK 级别 28 或更低)的 APK 或 app bundle 中访问后台位置?
- c# - 为什么自动实现的列表属性充当 C# 中所有实例的共享属性?
- android - 初始化 ADB 时出错:无法创建调试桥:无法启动 ADB 服务器
- flutter - 如何使容器在他的圆角之外变得透明?
- python - 在 Seaborn histplot 子图中自定义图例
- c# - IBM MQ XMS.NET - 连接时出现 2059 错误
- html - 为什么占位符属性中的 and 在浏览器中不起作用
- oracle - 数一数“CL”在 oracle 中报告我尝试的日期是这样的:
- security - 我在一个网站上发现了一个漏洞,我该如何与公司联系?
- regex - 匹配除正则表达式模式之外的所有内容