GitHub Action前置作业成功但zip_files作业被跳过问题排查
问题根因
- 没有显式配置
if规则的GitHub Action作业,默认携带隐式触发条件if: success(),要求所有needs声明的上游作业最终状态为success时才会执行。 - 你在
generate_build_number作业的if条件中使用了always(),即使该作业内部所有步骤全部执行成功,作业最终状态会被标记为neutral(中立状态)而非success,不满足下游zip_files的默认触发要求,因此被跳过。 - 额外逻辑缺陷:当前
generate_build_number中判断上游aws/azure/gcp作业状态的写法不符合预期,contains(join(needs.*.result, ','), 'success')只要三个上游作业中任意一个成功,条件就会成立,无法实现「三个上游全部成功才执行当前作业」的效果。
修复方案
根据实际业务需求选择对应配置即可:
方案1:不需要上游失败时执行generate_build_number
直接移除generate_build_number中导致状态异常的always(),同时修正上游状态判断逻辑,修复后generate_build_number执行成功时状态为success,下游zip_files无需额外配置即可正常触发:
generate_build_number: needs: [ aws, azure, gcp ] name: Generate Build Number runs-on: ubuntu-latest if: ${{ !contains(join(needs.*.result, ','), 'failure') && !contains(join(needs.*.result, ','), 'cancelled') }} outputs: build_number: ${{ steps.buildnumber.outputs.build_number }} steps: - name: Generate build number id: buildnumber uses: einaregilsson/build-number@v3 with: token: ${{secrets.github_token}} zip_files: needs: generate_build_number name: Generate Zip File runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - run: echo ${{needs.generate_build_number.outputs.build_number}} > world.txt - uses: montudor/action-zip@v1 with: args: zip -qq -r terraform-latest.zip aws azure gcp world.txt - uses: actions/upload-artifact@v1 with: name: terraform-latest path: ${{ github.workspace }}/terraform-latest.zip
方案2:需要保留generate_build_number中的always()
如果业务要求generate_build_number无论上游作业成功失败都要执行(比如做统一的状态统计、收尾操作),就给zip_files添加显式触发条件,明确判断依赖的generate_build_number执行成功后再运行,不受默认规则和上游中立状态影响:
zip_files: needs: generate_build_number name: Generate Zip File runs-on: ubuntu-latest if: ${{ needs.generate_build_number.result == 'success' }} steps: - uses: actions/checkout@v2 - run: echo ${{needs.generate_build_number.outputs.build_number}} > world.txt - uses: montudor/action-zip@v1 with: args: zip -qq -r terraform-latest.zip aws azure gcp world.txt - uses: actions/upload-artifact@v1 with: name: terraform-latest path: ${{ github.workspace }}/terraform-latest.zip
内容的提问来源于stack exchange,提问作者Alan Chen
相关产品推荐
相关产品推荐

