我该如何在特定分支上触发预定的操作?

9

我已经创建了一个操作,我希望它能够在分支foo上按计划运行(我的情况是每天两次)。

这是目前为止我得到的:

repo/.github/workflows/daily-foo-tests.yml

name: Run integration tests on foo branch twice a day
on:
  schedule:
    # Execute at 00:01 and 13:01 UTC daily
    - cron:  '00 01,13 * * *'

jobs:
  build:
    name: Run UI Automation
    runs-on: [self-hosted, macOS, X64]
    steps:
      - uses: actions/checkout@v2
      - name: dotnet build
        with: { ref: foo }
        // continues to do stuff, not important

现在,此操作已被推送到名为foo的分支。然而,前往github.com/org/repo/actions,它不会触发(我已经等了24小时了;在这一点上应该做点什么)。

触发指定分支上预定的github动作工作流的正确方法是什么?


1
请参考此答案。您的工作流必须提交到默认分支以触发“on:schedule”。 - peterevans
那么,假设foo是存储库的staging分支,而master是默认分支 - 工作流yaml必须存在于master分支上才能触发任何操作吗?我不希望它在默认分支上运行最新的提交SHA;我想要的是foo分支上的最新提交SHA。 - cbll
是的,没错。on: schedule 工作流在非默认分支中不起作用。但是当它运行时,您仍然可以检出其他分支。 - peterevans
我不确定是否理解正确,所以我直接问一下:我能以任何方式在非默认分支上运行定时工作流吗?那是你发给我的答案的最后部分吗? - cbll
1个回答

12

为了触发工作流程,必须将其提交到默认分支。如果只将其提交到非默认分支,则无法正常工作。

定时工作流会在默认或基本分支上运行最新的提交。

参考: https://docs.github.com/en/actions/reference/events-that-trigger-workflows#schedule

例如,此应该提交到默认分支。当它运行时,它会检出 foo 分支,然后您可以构建、测试等。

on:
  schedule:
    - cron:  '0 1 * * 4'

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          ref: foo
      
      # Build steps go here

谢谢。我会尝试这个解决方案。如果没问题的话,我会在12小时内接受它... 如果一切顺利的话;-) - cbll
有没有办法在两个分支中运行这个程序呢,比如默认分支和foo分支?当然我可以编写yml代码以便为每个分支设置单独的步骤或实现每个分支的单独yml文件,但是是否有更简单的方法来完成呢? - diidu
@diidu 我所知道的简化这种情况的唯一方法是使用 job matrix,以避免为每个分支重复步骤。 - peterevans

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