Gitlab CI 变量和脚本部分给出不同的结果
Gitlab CI variables and script section give different results
我搜索了很多示例,但它们对我不起作用。
我正在尝试 运行 在打开 MR 时检查更改的文件。
我的.gitlab-ci.yml
run_linters:
image: python:3
variables:
FILES: git diff --name-only $CI_MERGE_REQUEST_TARGET_BRANCH_NAME | grep *.py
before_script:
- python3 -m pip install black==21.5b1
- python3 -m pip install flake8==3.9.2
script:
- echo $FILES
- git diff --name-only $CI_MERGE_REQUEST_TARGET_BRANCH_NAME | grep *.py
- black --check $FILES
- flake8 $FILES
only:
- merge_requests
我得到了奇怪的输出。
echo $FILES
说 git diff --name-only main | grep incoming_file.py
incoming_file.py
是该 MR 中唯一的文件。为什么在 grep
附近?
并且 git diff
在脚本部分说 fatal: ambiguous argument 'main': unknown revision or path not in the working tree.
- 为什么文件名出现在
grep
周围?
- 为什么相同的
git diff
命令给出不同的结果?
Why is filename present around grep?
在 bash 中,当您引用 *
时,这将扩展并尝试匹配当前路径中存在的 files/directories,在您的情况下,因为只有 incoming_file.py
存在,所以它扩展到这个。
Why are same git diff commands give different result?
variables:
FILES: git diff --name-only $CI_MERGE_REQUEST_TARGET_BRANCH_NAME | grep *.py
当你在 variables section
中定义一个变量时,Gitlab 不执行命令,它简单地用字符串 git diff --name-only $CI_MERGE_REQUEST_TARGET_BRANCH_NAME | grep *.py
填充变量 FILES
然后在脚本部分,runner 将 *.py
扩展为 incoming_file.py
,将 $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
扩展为 main
这就是为什么在 echo
中您会看到 git diff --name-only main | grep incoming_file.py
这里
- git diff --name-only $CI_MERGE_REQUEST_TARGET_BRANCH_NAME | grep *.py
您实际执行命令并收到上述消息
我搜索了很多示例,但它们对我不起作用。
我正在尝试 运行 在打开 MR 时检查更改的文件。
我的.gitlab-ci.yml
run_linters:
image: python:3
variables:
FILES: git diff --name-only $CI_MERGE_REQUEST_TARGET_BRANCH_NAME | grep *.py
before_script:
- python3 -m pip install black==21.5b1
- python3 -m pip install flake8==3.9.2
script:
- echo $FILES
- git diff --name-only $CI_MERGE_REQUEST_TARGET_BRANCH_NAME | grep *.py
- black --check $FILES
- flake8 $FILES
only:
- merge_requests
我得到了奇怪的输出。
echo $FILES
说 git diff --name-only main | grep incoming_file.py
incoming_file.py
是该 MR 中唯一的文件。为什么在 grep
附近?
并且 git diff
在脚本部分说 fatal: ambiguous argument 'main': unknown revision or path not in the working tree.
- 为什么文件名出现在
grep
周围? - 为什么相同的
git diff
命令给出不同的结果?
Why is filename present around grep?
在 bash 中,当您引用 *
时,这将扩展并尝试匹配当前路径中存在的 files/directories,在您的情况下,因为只有 incoming_file.py
存在,所以它扩展到这个。
Why are same git diff commands give different result?
variables:
FILES: git diff --name-only $CI_MERGE_REQUEST_TARGET_BRANCH_NAME | grep *.py
当你在 variables section
中定义一个变量时,Gitlab 不执行命令,它简单地用字符串 git diff --name-only $CI_MERGE_REQUEST_TARGET_BRANCH_NAME | grep *.py
FILES
然后在脚本部分,runner 将 *.py
扩展为 incoming_file.py
,将 $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
扩展为 main
这就是为什么在 echo
中您会看到 git diff --name-only main | grep incoming_file.py
这里
- git diff --name-only $CI_MERGE_REQUEST_TARGET_BRANCH_NAME | grep *.py
您实际执行命令并收到上述消息