在设置 GitHub Action 来构建和部署我的应用程序时,我遇到了以下问题。
我想根据以下条件来部署我的 Web 应用程序。但是,每当 deploy-api
和 deploy-sync
跳过时,deploy-web
也会被跳过。我原以为我的 if 条件语句可以捕捉这种情况并仍然运行 deploy-web
,但事实并非如此。感觉好像错过了什么显而易见的东西,但却无法确定。
deploy-web:
name: Deploy Web
runs-on: ubuntu-latest
needs: [build-and-publish-web, deploy-api, deploy-sync]
if: |
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()
:(Translated: 好的解决方案,但问题在于依赖于“deploy-web”的工作仍然会被跳过,因此你最终需要在各处都添加always()
,但这并不理想。 - rethabalways()
在作业中使用的另一个问题是无法取消作业 (https://docs.github.com/en/actions/managing-workflow-runs/canceling-a-workflow#steps-github-takes-to-cancel-a-workflow-run)。 - user1119279${{ always() && !failed() && !cancelled() }}
- Chris Pfohlfailure()
- Krzysztof Madej