如何使用GitLab CI确保文件已更改?

5

我在GitLab上有一个小项目,其中包含一个CHANGELOG.md文件。我希望每次合并到主分支时都能更新它,但有时会忘记。我正在使用GitLab CI,因此我想利用它来检查是否更改了变更日志文件。我该怎么做?

2个回答

6
经过多次尝试,这是我的解决方案。希望能有所帮助。基本上,我只想在有新的合并请求时触发作业。使用 git,我获取了在合并请求中更改的文件列表,如果要跟踪的文件位于该列表中,则作业成功。如果未找到该文件,则作业失败。
update_file_check:
  stage: test
  script:
    - git fetch
    - FILES_CHANGED=$(git diff --name-only $CI_MERGE_REQUEST_DIFF_BASE_SHA...HEAD)
    - |+
      for i in $FILES_CHANGED
      do
        if [[ "$i" == "<filename>" ]]
        then
          exit 0
        fi
      done
      exit 1
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'

1
有多种方法可以实现,我建议使用与gitlab位于同一主机的runner和shell执行程序。基本上,您正在打开一种方法,以便在此gitlab runner中运行几个命令。现在,互联网上甚至在gitlab的官方文档中有很多资源,但总的来说,您需要遵循以下流程:

1. .gitlab-ci.yml

此文件应在项目的根目录中。当运行CI CD任务时,gitlab会读取并解释它。它可以像您希望的那样复杂,但是在我看来,我喜欢保持简单,所以我只会在更改主分支时调用脚本。

内容可能类似于:

Check Changelog:
  script:
    - sh .gitlab/CI-CD-Script.sh       ## Execute in the gitlab runner the script.
  only:
    - master                           ## It will run only when master branch changes.

2. .gitlab/CI-CD-Script.sh

如前所述,我更喜欢调用一个脚本来管理所有CI CD的逻辑。但正如之前所说,有多种实现相同结果的方法。下面,您可以按以下方式构建一个脚本:

#!/bin/bash
# Download the original changelog from master branch.
wget http://<yourgitlabAddress>/<pathToProject>/-/raw/master/CHANGELOG.md /tmp/CHANGELOG.md

if cmp -s /tmp/CHANGELOG.md CHANGELOG.md; then       ## Checking if files are different.
    echo "Changelog not changed"
    exit 1                                           ## Job will fail
else
    echo "Changelog changed"
    exit 0                                           ## Job will pass
fi

目前为止就这些了。我无法在你的环境中尝试,希望能对你有所帮助。


1
如果我理解正确的话,only: master 太晚了。检查应该在我合并到主分支之前进行,但是 if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"' 应该可以完成工作。 - Kalmar
1
你说得很对。这个流程将在更改合并到主分支后执行。如果你允许我给出一个建议,直接推送到主分支不是一个好的做法。你应该使用develop分支作为主分支和新分支之间的中介。所以你可以将其运行为only:develop。作为最佳实践,最好每次从develop添加新内容时都创建一个新分支。然后将其与develop合并,最后合并develop和master。或者你可以将每个新分支创建为feature/whatever,然后添加only:/^feature*$/。选择最适合你的方式。 - vsergi
1
我理解你的观点。此外,从PR创建的管道检查可能可以被规避。但这些只是小型个人项目,我已经讨厌合并问题了。所以我更倾向于现在使用https://trunkbaseddevelopment.com/。 - Kalmar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接