GitHub Actions基于Job输出的if条件无法触发后续Job
GitHub Actions 后续Job无法触发的问题修复
你的问题出在check_files_again2步骤的逻辑上:当所有修改文件都位于.github/workflows/目录下时,循环会重复向$GITHUB_OUTPUT写入modified_workflow_dir=true,导致该输出变量的值是多行的true,而非单个字符串true,后续Job的条件判断自然无法匹配。同时当前逻辑还存在漏洞:如果没有文件被修改(虽然push场景少见,但逻辑不严谨),变量会未被定义。
修正后的工作流代码
name: testing-workflow run-name: test-run on: push: branches: - '*' jobs: check_where_changed: name: Check files outputs: modified_workflow_dir: ${{ steps.check_files_again2.outputs.modified_workflow_dir }} runs-on: ubuntu-latest steps: - name: Checkout Code uses: actions/checkout@v3 with: fetch-depth: 2 - name: Check Modified Files In Workflow Directory id: check_files_again2 run: | echo "checking paths of modified files" # 先默认设为true,只要有一个文件不符合就改为false echo "modified_workflow_dir=true" >> $GITHUB_OUTPUT git diff --name-only HEAD^ HEAD > files.txt # 处理空文件的情况(无修改) if [ -s files.txt ]; then while IFS= read -r file do echo "$file" if [[ $file != .github/workflows/* ]]; then echo "This modified file is not under the workflows dir." echo "modified_workflow_dir=false" >> $GITHUB_OUTPUT break else echo "File modified in workflows dir" fi done < files.txt fi cat $GITHUB_OUTPUT workflow_test: name: Job For Testing Purposes if: needs.check_where_changed.outputs.modified_workflow_dir == 'true' needs: [ check_where_changed ] runs-on: ubuntu-latest steps: - name: Test echo run: echo "Testing Message"
关键修改点
- 初始默认设置
modified_workflow_dir=true,覆盖无文件修改的场景 - 仅当发现非目标目录的文件时,才修改变量为
false,避免重复赋值导致的变量值异常 - 增加空文件检查,处理无文件修改的边界情况
这样修改后,modified_workflow_dir只会有一个有效值,后续Job的条件判断就能正确触发了。
内容的提问来源于stack exchange,提问作者souchan410
相关产品推荐
相关产品推荐

