GitHub Actions:仅在特定分支上运行作业

243

我对GitHub Actions相对较新,有两个任务——一个运行我的测试,另一个将我的项目部署到服务器。

显然,我希望测试在每个分支上运行,但只有在推送到主分支时才能进行部署。

我正在努力找到在特定分支上运行作业的方法。我知道可以仅在特定分支上运行整个工作流程,但这意味着我会有一个“测试”工作流程和一个“部署”工作流程。

这听起来像是一种解决方案,但它们将并行运行。在理想情况下,测试将首先运行,只有在测试成功后,部署作业才会启动。但是,当使用2个单独的工作流程时,情况并非如此。

我如何能够实现这一点?是否有可能在特定分支上运行作业


我已经在下面更新了我的答案,加入了在job级别的新的if条件。https://dev59.com/gVMH5IYBdhLWcg3w0TXf#58142412 - peterevans
1
这个问题几年前就被提出来了,但是没有被采纳的答案。我可以建议作者接受下面提供的优质答案之一吗? - ScottishTapWater
13个回答

1

已经有一些很好的答案了。以下是指定多个分支的条件语句的一种方式:

name: my workflow
on: push
jobs:
  deploy:
    if: contains(fromJson('["refs/heads/master", "refs/heads/main"]'), github.ref)
    runs-on: ubuntu-latest
    steps:
      - name: Execute tests
        run: exit 0

0

2022

以下工作流仅在主分支推送时运行:

name: Distribute to Firebase

on:
  push:
    branches: [ main ]
jobs:
...

正如@long_hair_programmer所指出的那样,如果您创建一个分支并修改触发器,则可以在没有该验证的情况下运行修改后的版本。 - Mauro H. Leggieri

0

这个方法可以提前退出:

  - name: Exit if not on master branch
    if: github.ref == 'refs/heads/main'
    run: exit 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接