42

我在 Github Web UI 上看到了这个:

截屏

但我不清楚禁用的重新运行是我的.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"]
}
4

5 回答 5

57

有两种情况:

1)在失败的构建中,来自文档

或者,如果运行失败,要重新运行工作流,在工作流的右上角,使用重新运行检查下拉菜单,然后选择重新运行所有检查重新运行

2) 如果你的运行没有失败,你必须触发你的工作流运行的事件on:

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

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

这将添加一个空提交(未更改文件),并将触发pushGitHub 上的另一个事件,从而触发另一个工作流运行。

但是,这确实会破坏提交历史记录。如果您愿意,您可以稍后挤压/删除这些,但这可能并不理想。


这是对我的原始答案的更新,在 2019 年 8 月基于 YAML 的重新发布之前,它指的是基于 GitHub Actions HCL 的 v1。@tuff 首先做到了这一点,@instantepiphany 的警告。

于 2019-06-20T11:01:33.113 回答
10

您现在(2020 年 1 月)也可以使用此处宣布的新GitHub Actions API(!,尽管仍然是测试版)。

它确实包含一个GitHub Actions Secrets API

重新运行工作流

使用其 ID 重新运行您的工作流程。
对存储库具有写入权限的任何人都可以使用此端点。
GitHub 应用程序必须具有使用此端点的操作权限。

POST /repos/:owner/:repo/actions/runs/:run_id/rerun

因此,您可以尝试编写脚本并通过此新 API 重新运行 Actions 工作流。

于 2020-01-27T21:37:07.140 回答
6

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

重新运行 ui 的屏幕截图

(我通过我的 PR 上检查部分的“详细信息”链接进入此页面)。

于 2019-06-28T16:16:22.430 回答
5

假设您的工作流程从任何推送开始(您的 yml 包含一个触发器on: [push]),要重新运行由提交触发的成功操作,添加一个新的轻量级标签就足够了。

我使用这一个衬垫创建标签,推送标签,删除标签,推送标签删除:

git tag tmp-rerun && git push --tags && git tag -d tmp-rerun && git push origin :tmp-rerun
于 2020-05-01T21:16:43.950 回答
0

我制作了一个 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

于 2021-06-01T08:43:29.027 回答