配置 gitlab ci,以便在没有进行其他代码更改时仅部署配置文件?



目前,当通过 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}" ]]决定是否部署配置文件。

注意:手动方式的"干净"是指部署决策可以根据作业名称从管道屏幕中看到,而对于不太干净的自动方式,您无法从管道屏幕确定哪个部署决策,因为条件子句嵌入在单个作业中。

相关内容

最新更新