[已解决]如何在gitlib-ci.yml中把本次提交改变的文件赋值给一个变量(20210928)
业务背景
prettier在ci的过程中做增量检测.需要以下几个步骤
- 声明一个gitlab变量xxx
- 执行git命令拿到当前改变的文件名
- 将git命令的结果赋值给$xxx
- 运行yarn prettier --check $xxx
尝试了好几种方式,都无法赋值成功.
示例代码
image: node:latest
stages:
- test
test:
stage: test
tags:
- global-ci
variables:
COMMIT_FILES: git diff-tree --no-commit-id --name-only -r $CI_COMMIT_SHA
script:
- echo $COMMIT_FILES
# -> git diff-tree --no-commit-id --name-only -r 02e80f41c21ab51d26b98988fbdb9fffae2f69bf
- $COMMIT_FILES = $(git diff-tree --no-commit-id --name-only -r $CI_COMMIT_SHA)
- echo $COMMIT_FILES
# fatal: ambiguous argument '=': unknown revision or path not in the working tree.
- yarn prettier --check git diff-tree --no-commit-id --name-only -r $CI_COMMIT_SHA
参考文档
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
为啥要搞这么复杂,gitlab-ci本来就会把前一次sha1和本次sha1分别以环境变量形式注入进来,根本不需要自己去判断这么复杂。参考我以前写的commitlint判断部分:
特别注意
CI_COMMIT_BEFORE_SHA
这个变量需要特殊判断,因为可能会因为你是初次提交(会被赋值成0000000000000000
),或者用push -f
回退过(此时由于强行回退,导致你的CI_COMMIT_BEFORE_SHA
已经不存在了),导致这个变量可能不符合你的期望。具体你可以参考我的脚本部分使用git rev-list --quiet "${CI_COMMIT_BEFORE_SHA}..HEAD"
确保这个变量确实可用的。最后就是根据你的需求,列出哪些文件发生了改变:
解决方案
$
符号请参照一楼的答案,更加详细和全面