首页 > 解决方案 > 配置 gitlab ci,使其仅在未进行其他代码更改的情况下部署配置文件?

问题描述

目前,当通过 gitlab ci 提交到主分支时,我们的部署会自动完成。我们为每个 repo 部署了两个东西,一个 war 和一个配置文件,配置文件与构建 war 的代码在同一个 repo 中。

我想更改此逻辑,以便如果我进行仅更改配置文件的提交,则只会部署配置文件,即如果未修改战争的代码,则不要重新部署战争.

是否有一种干净的方法来更新我们的 gliab-ci,以便它可以根据更改的文件来确定部署战争、配置文件或两者兼而有之?

标签: deploymentgitlabgitlab-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}" ]]来决定是否部署配置文件。

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


推荐阅读