如何重新运行 Github Actions?

56

我在Github的网页界面上看到这个:

屏幕截图

但是我不确定禁用重新运行是由我的 .github/main.workflow 配置导致的,还是GitHub Actions服务继承的。

以下是示例工作流程 - 我没有发现任何明显禁用重新运行的设置。

workflow "Test, Lint" {
  on = "push"
  resolves = [
    "Test",
    "Lint",
    "Lint Format"
  ]
}

action "Install" {
  uses = "actions/npm@master"
  args = "install"
  secrets = ["SECRET_TOKEN"]
}

action "Test" {
  needs = "Install"
  uses = "actions/npm@master"
  args = "test"
  secrets = ["SECRET_TOKEN"]
}

action "Lint" {
  needs = "Install"
  uses = "actions/npm@master"
  args = "run lint"
  secrets = ["SECRET_TOKEN"]
}

action "Lint Format" {
  needs = "Install"
  uses = "actions/npm@master"
  args = "run lint:format"
  secrets = ["SECRET_TOKEN"]
}

如果构建是针对PR分支的,并且您已经在主分支上进行了后续更改,则可以在本地对PR分支进行变基,然后将其推回您的GitHub远程分支。或者即使您在主分支上没有进行后续更改,您也可以在分支上局部修改最新的提交消息——通过进行微小的空格或标点符号更改等操作——然后将其推回您的GitHub远程分支。 - sideshowbarker
6个回答

74

有两种情况:

  1. 构建失败时,根据文档

如果运行失败,您可以选择重新运行工作流程。在工作流程的右上角中使用“重新运行检查”下拉菜单,并选择“重新运行所有检查”。 rerun

  1. 如果您的运行没有失败,您需要触发工作流程所运行的事件on:

    在最常见的on: push情况下,您可以添加一个空提交来激活 GitHub actions:

    git commit --allow-empty -m "trigger GitHub actions"
    git push
    

    这将添加一个空提交(没有更改文件),并在GitHub上触发另一个push事件,因此会触发另一个工作流运行。但是,这会混淆提交历史记录。如果需要的话,您以后可以压缩/删除它们,但这可能不是理想的选择。

    这是对我最初答案的更新,原来的答案涉及到 GitHub Actions 基于 HCL 的 v1 版本,在2019年8月发布了基于YAML的版本。@tuff首先回答正确,但@instantepiphany有一些提示。


谢谢,这是我找到的唯一方法。 - Sourov Roy Chowdhury
我认为还有另一种重新运行的方式,就是使用“部署”功能。

请在workflow.yml文件中设置部署:

name: 测试名称 on: [deployment, push] ...然后通过curl调用,如下所示: curl -X POST
-H "Authorization: token xxxxxxxxxxxxxxxx"
-d '{"ref": "master", "environment": "periodic execution"}'
https://api.github.com/repos/${username}/${reponame}/deployments
- Thura Aung
作为这个答案中第二种情况的替代方案(推送一个空提交),你也可以在本地修改分支上最新的提交消息——通过进行微小的空格或标点符号更改等——然后将其推回到您的 GitHub 远程分支。 - sideshowbarker
我在下面发布了另一个案例,用户可以触发重新运行:https://dev59.com/EVMI5IYBdhLWcg3wV6Jr#76918078 - Wayne Mao

12
你现在(2020年1月)可以使用新的GitHub Actions API(尽管仍处于测试阶段),具体信息可参见此处公告
此外,它还包括一个GitHub Actions Secrets API

Re-run a workflow

Re-runs your workflow run using its id.
Anyone with write access to the repository can use this endpoint.
GitHub Apps must have the actions permission to use this endpoint.

POST /repos/:owner/:repo/actions/runs/:run_id/rerun
所以,您可以尝试脚本,并通过此新API重新运行操作工作流程。

ken评论(2022年7月)中指出:

只能重新运行一个月内运行的工作流程。
超过30天运行的任何工作流程都无法重新运行。
我在2022年6月进行了测试。


自2022年7月起,您可以区分触发器和执行者

3
尝试不错,但它禁止重新运行成功的运行。我收到的错误消息是:{ "message": "此工作流程运行无法重新运行", "documentation_url": "https://developer.github.com/v3/actions/workflow_runs/#re-run-a-workflow" } - warpech
@warpech 那...很不幸。 - VonC
可能这个API不像文档中描述的那样工作。我收到了错误信息“此工作流运行无法重新运行”。 - Sourov Roy Chowdhury
@SourovRoyChowdhury之前是否有一次成功运行的工作?如上所述,您无法重新运行成功的运行。 - VonC
只能重新运行一个月内运行的工作流。超过30天运行的任何工作流都无法重新运行。已在2022年6月进行了测试。 - ken
@ken 那真是不幸。我已经在答案中包含了你的评论,以增加可见性。 - VonC

9

如果您的工作流程是在任何推送时开始(您的yml文件包括触发器on: [push]),要重新运行由提交触发的成功操作,只需添加一个新的轻量级标签即可。

我使用这个一行代码来创建标签,推送标签,删除标签,推送标签删除:

git tag tmp-rerun && git push --tags && git tag -d tmp-rerun && git push origin :tmp-rerun

7
这只是 Github Actions 的一个缺失/未实现的功能,现在已经添加了。我没有对我的工作流文件或存储库设置进行任何更改,但现在我可以看到"重新运行所有检查"的UI界面:

screenshot of re-run ui

我通过从我的PR的检查部分跟随“详细信息”链接来到了这个页面。

3
很遗憾,截至本条评论发布时,只有失败的操作才能重新运行 - 至少在我的团队仓库中是这样,我们可以重新运行已失败的操作,但对于成功的操作,该链接/按钮不可见,这意味着我们必须提交一个空提交以重新运行。目前这使我们继续使用Travis,尽管我们希望切换到Actions,因为它们比Travis更强大。如果GitHub没有添加此功能以实现功能平等,我会感到惊讶 - Travis支持重新运行成功构建,BitBucket Pipelines也是如此。 - instantepiphany

1
我编写了一个Python脚本来触发GitHub工作流程:
from github import Github

# using an access token : https://github.com/settings/tokens
g = Github("access_token")
#g = Github(base_url="https://{hostname}/api/v3", login_or_token="access_token")


for repo in g.get_user().get_repos():
    if (repo.get_workflows().totalCount > 0):
        print(repo.name, 'Have github workflow')
        for workflow in repo.get_workflows():
            if workflow.create_dispatch(repo.default_branch) is True:
                print(repo.name, 'Manual workflow has been trigger')
            else:
                print(repo.name, 'No nanual workflow, you need to add "workflow_dispatch:" to workflow file')
    else:
        print(repo.name, 'Does not have github workflow')

您需要安装此软件:https://github.com/PyGithub/PyGithub


0
如果有人搜索“GitHub Action 重新运行”并阅读这个主题,我注意到GitHub现在允许通过点击作业名称右侧的重新运行图标来重新运行每个作业。

GitHub Action re-run job

您可以点击重新运行图标并再次触发。

这在某些情况下很有用,例如,您可以预定义一个仓库变量来跳过特定的作业,并且当条件匹配时,您可以更新该变量并重新运行该作业。


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