我正在尝试设置Gitlab CI的条件:
第二个条件是通过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:
但是很多样板
答案 0 :(得分:0)
我不确定对此是否有一个优雅的解决方案,它可以大大减少实现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
我知道这可能无法回答您的问题,但是希望对您有所帮助。
请注意,.
中的.job-definition
意味着该作业不会运行(我喜欢将其视为Linux中的隐藏文件,添加点前缀可将其从CI中隐藏起来)。