在设置 GitHub 操作来构建和部署应用程序时,我遇到了以下问题。
我想在以下条件下部署我的网络应用程序。然而,wheneverdeploy-api和deploy-syncskipdeploy-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')
Run Code Online (Sandbox Code Playgroud)
Krz*_*tof 36
您似乎遇到了这个问题 - 如果跳过“needs”属性中的作业,则作业级“if”条件未正确评估。
请尝试使用always表达式:
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')
Run Code Online (Sandbox Code Playgroud)
不特定于原始问题,但如果您关心的只是确保没有失败,needs.*.result则提供通配符行为,使您不必手动检查每个步骤:
if: |
always() &&
!contains(needs.*.result, 'failure') &&
!contains(needs.*.result, 'cancelled')
Run Code Online (Sandbox Code Playgroud)
rh0*_*h0x 12
我更喜欢更简洁的条件,但如果您的条件很复杂,您可能需要更复杂的解决方案,如接受的答案中所示:
needs: [compute_version_tag, bump_version]
if: ${{ always() && !failure() && !cancelled() }} # when none of the needed jobs fail or are cancelled (skipped or successful jobs are ok).
Run Code Online (Sandbox Code Playgroud)
请注意,!cancelled()需要能够取消具有always()if 条件的作业。
| 归档时间: |
|
| 查看次数: |
12411 次 |
| 最近记录: |