GitHub Action前置job被跳过导致后续deploy-web任务意外跳过如何解决
问题根因
GitHub Actions 对设置了needs依赖的任务,默认会在你自定义的if条件前隐含拼接success() && 的前缀逻辑。而内置函数success()的判定规则是「所有依赖任务全部执行成功,不存在失败或被跳过的任务」,因此当deploy-api或deploy-sync被跳过时,默认的success()直接返回false,你写的自定义判断逻辑根本不会执行,直接导致deploy-web被跳过。
解决方案
在你的if条件最开头添加always()内置函数,覆盖默认的隐含success()判断,保留你原有的业务逻辑即可。
修正后的配置如下:
deploy-web: name: Deploy Web runs-on: ubuntu-latest needs: [build-and-publish-web, deploy-api, deploy-sync] if: | always() && needs.build-and-publish-web.result == 'success' && (needs.deploy-api.result == 'success' || needs.deploy-api.result == 'skipped') && (needs.deploy-sync.result == 'success' || needs.deploy-sync.result == 'skipped')
补充说明
always()的作用是让任务的if判断无论依赖任务的执行状态是什么都会执行,你原有的条件已经限制了build-and-publish-web必须成功,另外两个依赖任务仅允许成功或跳过的状态,不会出现依赖任务失败时误触发deploy-web的问题,完全符合你的预期触发逻辑。
内容的提问来源于stack exchange,提问作者Scalahansolo
相关产品推荐
相关产品推荐

