目前,当通过 gitlab ci 向主分支提交时,我们的部署会自动完成。 我们为每个存储库部署两件事,一个 war 和一个配置文件,配置文件与构建 war 的代码位于同一个存储库中。
我想更改此逻辑,以便如果我进行仅更改配置文件的提交,则只会部署配置文件,即如果战争代码尚未修改,则不要重新部署战争。
有没有一种干净的方法来更新我们的 gliab-ci,以便它可以根据更改的文件确定部署战争、配置文件或两者?
干净但手动的方式
要求开发人员在提交消息中添加特殊标志,例如[DEPLY_CFG]
。然后在.gitlab-ci.yml
中,使特定作业具有以下only
属性:
only:
variables:
- $CI_COMMIT_MESSAGE =~ /[DEPLY_CFG]/
自动但不那么干净的方式
添加以下命令以检查特定文件是否在提交的文件列表中:
CFG_MOD=$(git diff-tree --no-commit-id --name-only -r ${CI_COMMIT_SHA} | grep path/to/the/config/file)
然后,只需使用if [[ -n "${CFG_MOD}" ]]
决定是否部署配置文件。
注意:手动方式的"干净"是指部署决策可以根据作业名称从管道屏幕中看到,而对于不太干净的自动方式,您无法从管道屏幕确定哪个部署决策,因为条件子句嵌入在单个作业中。