求助:基于Web查询结果跳过GitHub Actions后续任务配置失效
问题分析和修复方案
第一个坑:脚本输出被强行覆盖
你写的Check Previous Build步骤里,就算HTTP状态码符合200-299的条件,最后一行还是会执行echo "previous_build=false" >> $GITHUB_OUTPUT,直接把之前设的true给冲没了,结果输出永远是false,后续任务的判断自然失效。
第二个坑:needs引用搞错了名字
主Workflow里你写的是needs.check_previous_build.outputs.previous_build,但你的Job名字是check-previous-build(用横杠分隔的),needs后面得跟Job的名字,不是步骤的ID,所以正确的写法是needs.check-previous-build.outputs.previous_build。
第三个坑:条件写反了
你要的是“返回200时跳过后续任务”,也就是当previous_build是true的时候,不运行bundle-install。但原配置里的if条件是等于true才运行,正好搞反了。
改完后的配置
先改check-previous-build.yml里的脚本
改成if-else结构,保证只设一次输出:
- name: Check Previous Build id: check_previous_build run: | sha=$(git show HEAD --format=%T -q) url=http://example.com/check?id=${sha} echo "Checking $url .." status_code=$(curl -s -o /dev/null -w "%{http_code}" $url) if [[ $status_code -ge 200 && $status_code -le 299 ]]; then echo -e "\x1B[32m✅ Build has previously completed \x1B[0m" echo "previous_build=true" >> $GITHUB_OUTPUT else echo "previous_build=false" >> $GITHUB_OUTPUT fi
再改主Workflow的条件判断
修正needs引用和判断逻辑:
jobs: check-previous-build: uses: ./.github/workflows/check-previous-build.yml bundle-install: uses: ./.github/workflows/deps-bundle-install.yml secrets: inherit needs: - check-previous-build if: ${{ needs.check-previous-build.outputs.previous_build == 'false' }}
这么改完之后,当HTTP状态码在200-299之间时,previous_build会被设为true,bundle-install任务会因为不满足条件直接跳过(不会失败,就是显示“skipped”状态);状态码不对的时候,任务就正常跑起来了。
内容的提问来源于stack exchange,提问作者Neil Middleton
相关产品推荐
相关产品推荐

