mic*_*ohl 9 bash continuous-integration grep github-actions
我在 Github Actions 工作中有一个步骤:
- name: Check for changes
run: |
diff=$( git diff --name-only 'origin/main' )
changed_files=$( echo $diff | grep -c src/my_folder ) # this fails
# more script lines
# that are unrelated
Run Code Online (Sandbox Code Playgroud)
Error: Process completed with exit code 1. 仅当 grep 找不到任何内容时才会失败。如果 中有匹配项$diff,则此步骤按预期进行。但当然它也需要在没有匹配的情况下工作。
我可以在本地或在脚本内运行它,没有问题,退出代码总是0(在 Mac 上)。
我不明白问题是什么。经过几个小时的反复试验和研究,我了解到这grep在 Github 操作中显然很棘手,但我没有找到任何提示或适当的文档,我应该如何解决这个确切的情况。
如果我将失败的线路更改为
echo $( echo $diff | grep -c src/my_folder ) # this works and prints out the result
Run Code Online (Sandbox Code Playgroud)
这可以毫无问题地执行。
但是,即使没有发现任何结果,如何将 grep 输出放入变量中呢?
pyn*_*exj 11
根据文档,默认情况下 Github Actions 允许set -e运行该步骤的命令。这就是为什么中间命令失败可能导致整个步骤失败的原因。要完全控制步骤的命令,您可以这样做:
- name: Check for changes
shell: bash {0}
run: |
diff=$( git diff --name-only 'origin/main' )
changed_files=$( echo $diff | grep -c src/my_folder )
# ...
# ...
Run Code Online (Sandbox Code Playgroud)
set -e或者您可以在步骤脚本的开头禁用默认值:
- name: Check for changes
run: |
set +x
diff=$( git diff --name-only 'origin/main' )
changed_files=$( echo $diff | grep -c src/my_folder )
# ...
# ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4166 次 |
| 最近记录: |