gitlab - 仅在 .gitlab-ci.yml 中复杂的析取逻辑
问题描述
我正在尝试为条件设置 Gitlab CI:
- 目录“spark/**/*”上的 git push 事件修改的文件
- 或者有一个变量 $PROJECT == 'spark'
第二个条件是由设置变量的 api 调用(触发令牌)创建的管道。
使用 AND 表达式,它看起来像:
only:
variables:
- $PROJECT == 'spark'
changes:
- spark/**/*
到目前为止,我最好的尝试是:
deploy-spark: &deploy-spark
# job definition
only:
changes:
- spark/**/*
except:
- triggers
deploy-spark-token:
<<: *deploy-spark
only:
variables:
- $PROJECT == 'spark'
refs:
- triggers
except:
但它有很多样板
解决方案
我不确定是否有一个优雅的解决方案可以显着减少实现 OR 逻辑的样板。每当我不得不这样做时,我都会尝试将“工作”与 CI 机制分开,以帮助提高可维护性。
将您的作业定义提取到模板中,并将该模板包含到每个部署作业中有助于保持界面清洁。这意味着您有一个明显的地方可以更改运行的代码,以及两个使用该代码的地方。这两个部署作业不相互依赖,对其中一个的任何更改都不会无意中影响另一个。
.job-definition: &job-definition
script:
- echo "Some script
deploy-spark
<<: *job-definition
only:
changes:
- spark/**/*
except:
- triggers
deploy-spark-token:
<<: *job-definition
only:
variables:
- $PROJECT == 'spark'
refs:
- triggers
我知道这可能无法回答您的问题,但我希望这会有所帮助。
请注意,.
in.job-definition
表示作业不运行(我喜欢将其视为 Linux 中的隐藏文件,添加点前缀会将其从 CI 中隐藏)。
推荐阅读
- echarts - eCharts axisLabel 格式化程序返回 html
- mysql - 错误 sql (1064): 你的 SQL 语法有错误''
- python - 我无法让 python 命令行程序工作。尽管设置了 PATH 变量
- javascript - 使用Webpack在不同文件中的JQuery函数
- sql-server - 在 SQL Server 中,如果 @RecCtr % 10000 =0,则此语句中的 % 符号执行什么函数或计算
- c# - C# 在 foreach 中使用 async await 来执行 API
- powershell - 使用 powershell 从远程 https url 下载未知文件
- python - 如何更改多索引中的值?
- java - 使 MySQL 连接器重用 SSLSessionContextImpl
- regex - 过滤(或“剪切”)以“OS=abc”开头的列