我对 GitHub Actions 比较陌生,我有 2 份工作——一份运行我的测试,另一份将我的项目部署到服务器上。
显然,我希望测试在每个分支上运行,但是只有当某些内容被推送到 master 时才应该进行部署。
我正在努力寻找一种在特定分支上运行作业的方法。我知道只能跑整个工作流程在特定分支上,但这意味着我将有一个“测试”工作流程和一个“部署”工作流程。
这听起来像是一个解决方案,但是它们将并行运行。在理想的情况下,测试将首先运行,只有成功后,部署作业才会开始。使用两个单独的工作流程时,情况并非如此。
我怎样才能实现这一目标?是否可以运行jobs在特定的分支上?
Answer recommended by
CI/CD /collectives/ci-cd
Collective
在最近的更新中,您现在可以将if
条件句在job
等级。请参阅此处的文档。https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idif https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idif
我测试了运行该作业的工作流程test
每次推送时,但只运行deploy
在主分支上。
name: my workflow
on: push
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Execute tests
run: exit 0
deploy:
runs-on: ubuntu-latest
needs: test
if: github.ref == 'refs/heads/master'
steps:
- name: Deploy app
run: exit 0
以下是我的原始答案,如果您希望有单独的工作流程,则还有一个替代解决方案。
第一个工作流程针对每个分支运行,除了master
。在此工作流程中,您仅运行测试。
on:
push:
branches:
- '*'
- '!master'
第二个工作流程仅运行master
并运行您的测试并在测试成功通过时进行部署。
on:
push:
branches:
- master
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)