GitHub Action中always()与if语句结合失效问题及解决方案咨询
GitHub Action手动参数控制作业执行的解决方案
方案一:作业级条件控制(仅满足参数时执行整个作业)
调整作业的if条件,将always()与输入参数判断结合,既保证依赖失败时作业仍能触发,又仅在用户选择true时执行作业:
test: runs-on: ubuntu-latest if: ${{ always() && inputs.test == true }} needs: [smth] steps: - uses: actions/checkout@v3 - name: test id: test-status run: | echo do smth
这种方式下,只有当inputs.test为true时,整个作业才会执行;同时always()确保即使依赖的smth作业失败,只要参数符合条件,作业依然能被触发。
方案二:步骤级条件控制(作业始终触发,仅核心步骤受参数控制)
如果需要作业必然触发(比如要始终发送基础Slack通知),仅让核心步骤受参数影响,可以把判断逻辑放到步骤的if里,作业级只保留always():
test: runs-on: ubuntu-latest if: ${{ always() }} needs: [smth] steps: - uses: actions/checkout@v3 # 仅当参数为true时执行核心测试步骤 - name: test id: test-status if: ${{ inputs.test == true }} run: | echo do smth # 始终执行的步骤,比如发送基础Slack消息 - name: 发送基础Slack通知 run: | echo "作业已触发"
这种方式完全符合你提到的「始终允许发送Slack消息,但仅在用户未选false时发送核心内容」的需求:作业会被始终触发(包括依赖失败时),基础通知步骤不受参数影响,核心步骤仅在参数为true时执行。
内容的提问来源于stack exchange,提问作者Tuki2010
相关产品推荐
相关产品推荐

