我在GitLab上有一个小项目,其中包含一个CHANGELOG.md
文件。我希望每次合并到主分支时都能更新它,但有时会忘记。我正在使用GitLab CI,因此我想利用它来检查是否更改了变更日志文件。我该怎么做?
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"'
此文件应在项目的根目录中。当运行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.
如前所述,我更喜欢调用一个脚本来管理所有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
目前为止就这些了。我无法在你的环境中尝试,希望能对你有所帮助。
only: master
太晚了。检查应该在我合并到主分支之前进行,但是if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"'
应该可以完成工作。 - Kalmaronly:develop
。作为最佳实践,最好每次从develop添加新内容时都创建一个新分支。然后将其与develop合并,最后合并develop和master。或者你可以将每个新分支创建为feature/whatever
,然后添加only:/^feature*$/
。选择最适合你的方式。 - vsergi