我是GitHub Actions的新手,有2个工作-一个运行我的测试,另一个将我的项目部署到服务器上。
显然,我希望测试可以在每个分支上运行,但是部署应该仅在将某些内容推入主程序时进行。
我正在努力寻找一种在特定分支上运行作业的方法。我知道有可能只在特定分支上运行整个工作流程,但这意味着我将拥有一个“测试”工作流程和一个“部署”工作流程。
这听起来像是一个解决方案,但是它们将并行运行。在理想情况下,测试将首先运行,并且只有在测试成功的情况下,部署工作才能开始。使用2个单独的工作流时不是这种情况。
我将如何实现这一目标?是否可以在特定分支上运行作业?
在最近的更新中,您现在可以将if
条件设置为job
水平。请参阅此处的文档。https://help.github.com/cn/articles/workflow-syntax-for-github-actions#jobsjob_idif
我测试了此工作流程,该工作流程可test
在每次推送时运行该作业,但仅deploy
在master分支上运行。
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