我在 GitLab 上有一个小项目,我CHANGELOG.md在其中保存了一个文件。我想在每次合并时更新它以掌握,但有时我会忘记。我正在使用 GitLab CI,因此我想使用它来检查更改日志文件是否已更改。我该怎么做?
小智 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"'
Run Code Online (Sandbox Code Playgroud)
这是可能的,并且有多种方法可以实现它。我建议使用 gitlab 所在的同一主机作为带有 shell 执行器的运行程序。基本上,您正在打开一种方式,以便在这个 gitlab 运行程序中运行一些命令。现在,互联网上甚至gitlab的官方文档中都有很多资源,但总而言之,您需要遵循以下流程:
该文件应该位于项目的根目录中。运行 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.
Run Code Online (Sandbox Code Playgroud)
如前所述,我更喜欢调用一个脚本来管理所有 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
Run Code Online (Sandbox Code Playgroud)
到目前为止,这就是全部了。我无法在您的环境中尝试,希望对您有所帮助。
| 归档时间: |
|
| 查看次数: |
4803 次 |
| 最近记录: |