运行 一个 GitHub 动作最后
Run a GitHub Action Last
我有一堆 GitHub 服务操作,如果相应目录发生变化,每个操作都会构建一个容器。然后我有一个最终的 GitHub 操作,它使用 Terraform 设置云环境并使用其他操作创建的容器来部署微服务和 API 我的项目。
目前,我 运行 在所有其他操作完成后手动执行最后一个操作。但是,我想知道是否有任何方法可以自动执行此操作。我知道我可以链接操作,但我不确定如何处理这个,因为任何数量的操作都可能 运行 并且可能以任何顺序完成。
在一个工作流程中?您可以 运行 在各自的工作中并行执行所有操作。然后对最终作业使用 needs:
以依赖于所有其他作业并在该作业中部署应用程序。
您可以将每个 GitHub 操作变成一个 composite action 以提高可重用性和可读性。
但是您可以将所有现有操作合并到 1 个工作流中 - 如果需要不同的运行器,则每个操作都在单独的作业中。
然后您可以使用 needs
语法设置这些作业之间的依赖关系。
最后,当它们全部完成时,您可以有 1 个作业,其中每个作业都有 needs
,并检查它们是否成功,并根据该作业执行您需要的内容。
举个例子:
jobs:
job1:
job2:
needs: job1 //if you want to queue jobs then set dependency, if you want to run job1, job2 in parallel, remove this dependency
final_action:
needs: [job1, job2]
if: ${{ needs.job1.result == 'success' && needs.job2.result == 'success' }}
run: //PUBLISH STUFF
notify_error:
needs: [job1, job2]
if: ${{ always() && !cancelled() && (needs.job1.result != 'success' || needs.job2.result != 'success') }}
run: //NOTIFY FAILURE
我有一堆 GitHub 服务操作,如果相应目录发生变化,每个操作都会构建一个容器。然后我有一个最终的 GitHub 操作,它使用 Terraform 设置云环境并使用其他操作创建的容器来部署微服务和 API 我的项目。
目前,我 运行 在所有其他操作完成后手动执行最后一个操作。但是,我想知道是否有任何方法可以自动执行此操作。我知道我可以链接操作,但我不确定如何处理这个,因为任何数量的操作都可能 运行 并且可能以任何顺序完成。
在一个工作流程中?您可以 运行 在各自的工作中并行执行所有操作。然后对最终作业使用 needs:
以依赖于所有其他作业并在该作业中部署应用程序。
您可以将每个 GitHub 操作变成一个 composite action 以提高可重用性和可读性。
但是您可以将所有现有操作合并到 1 个工作流中 - 如果需要不同的运行器,则每个操作都在单独的作业中。
然后您可以使用 needs
语法设置这些作业之间的依赖关系。
最后,当它们全部完成时,您可以有 1 个作业,其中每个作业都有 needs
,并检查它们是否成功,并根据该作业执行您需要的内容。
举个例子:
jobs:
job1:
job2:
needs: job1 //if you want to queue jobs then set dependency, if you want to run job1, job2 in parallel, remove this dependency
final_action:
needs: [job1, job2]
if: ${{ needs.job1.result == 'success' && needs.job2.result == 'success' }}
run: //PUBLISH STUFF
notify_error:
needs: [job1, job2]
if: ${{ always() && !cancelled() && (needs.job1.result != 'success' || needs.job2.result != 'success') }}
run: //NOTIFY FAILURE