如何使用GitHub Actions手动触发一个步骤

30
在每个 CI 解决方案(Jenkins、CircleCI、GitlabCI)中,都可以暂停流水线并等待手动批准后继续执行。
如何在 GitHub Actions 中实现这一功能?

可能的解决方法:可以通过评论来触发运行?https://github.community/t/trigger-a-github-workflow-if-it-matches-a-particular-comment-in-the-pull-request/116402 - Ben Creasy
6个回答

11
似乎现在可以使用环境来完成这个任务:https://docs.github.com/en/actions/managing-workflow-runs/reviewing-deployments 只需创建一个环境,选择所需的审查人员,添加自己或团队,然后保存即可。
然后在您的 Github Actions YAML 文件中关联该环境。
environment:
  name: <Your Github Environment here>

然后要释放该步骤,您可以点击“查看部署”,然后选择要部署的环境。

4
请注意,对于私有仓库,只有在使用Github企业版时才可以使用此功能。 - sgdesmet

8

我目前的工作需要使用GitHub Actions,不得不说我对于它们是如何在微软的支持下发展壮大感到惊讶。

无论如何,仍然没有专门的功能来执行非常简单且必需的任务。不过我有一种不错而且不太麻烦的解决方法。

  • 如果您没有使用环境变量,请定义一个环境变量,并将其命名为“manual_approval”或类似名称,并分配所需的批准者(可以是组)。这样就能解决问题了。

  • 如果您已经在使用环境变量(您应该这么做),请为每个环境定义2个条目(例如“prod”和“prod-manual”)。然后以相同的方式配置它们,只需在手动条目中添加所需的批准者即可。

现在,您只需像以下示例中那样在流水线中添加此环境即可:

name: manual approval demo
on:
  push:

jobs:
  tf_plan:
    name: Terraform Plan
    runs-on: terraform
    environment: Prod
    steps:
    ...

  tf_apply:
    name: Terraform Apply
    runs-on: terraform
    environment: Prod-manual
    steps:
    ...

为了满足工作流程,每个现实生活环境需要定义两个环境。每个job只能引用单个环境。

这不是完美的解决方案,但这是我能想到的最少丑陋的解决方案。与其他工具相比,GitHub Actions 的成熟度确实还有很大提升空间。


对于其他人,这是文档链接:https://docs.github.com/en/actions/using-workflows/triggering-a-workflow#using-environments-to-manually-trigger-workflow-jobs - winkbrace

5
现在有一种方法可以实现它(不确定何时开始提供此功能,但我刚看到)。所以基本上只需在您的工作流之前添加“workflow_dispatch:”就像这样。
  # Controls when the workflow will run 
  on:
  # Triggers the workflow on push or pull request events but only for the master branch
    push:
      branches: [ master ]

  # Allows you to run this workflow manually from the Actions tab
    workflow_dispatch:

  # A workflow run is made up of one or more jobs that can run sequentially or in parallel
  jobs:
  # This workflow contains a single job called "build"
    build:
    # The type of runner that the job will run on
      runs-on: ubuntu-latest

当你导航到“操作”选项卡并选择你添加了此命令的工作流时,你会在列表上方看到一个“运行工作流”下拉框。使用此控件手动运行工作流。在这里你应该看到按钮。

2
这并不是我的问题,是的,可以触发一个流水线(或作业),但不能单独触发一个步骤。 - Antoine
1
@Antoine 我的错... 当我在寻找“如何手动触发...”时,这个弹出窗口出现了,所以我忽略了它。 - markovic-m

5
目前似乎没有手动触发的方式,您只能重新运行失败的工作流程。但是有很多有用的事件可以实现类似的功能。例如:标签事件:有人在PR上打上“已批准”的标签。或者拉取请求评论事件:有人在PR上评论“部署到stage”。

4
“您可以在工作流程中添加一个简单的步骤,仅回显一些内容,并在该步骤上设置必需的审阅者环境。”
“就像这里一样,我创建了一个名为‘ManualApprove’的步骤,在我的计划步骤运行之前需要成功通过。‘approvers’环境只包含所需的审阅者。”
ManualApprove:
needs: TerraformShow
environment:
  name: approvers
runs-on: ubuntu-latest
steps:
- name: manual approve
  run: |
      echo "Manually approved"

Workflow

这将为您提供一个按钮,您可以点击它,就像您从GitLab等应用程序中所熟悉的那样...

你不需要一个什么都只会回显的独立工作,可以在需要获得批准后运行的工作中设置环境。 - undefined

0

目前没有手动触发器,但是Github提供了on_dispatch事件,您可以针对该事件来启动重新运行。您可以通过curl或从Postman内部执行此操作。我已经用Postman编写了一个解决方案,并在此处包含了屏幕截图: https://medium.com/@christinavhastenrath/how-to-run-github-actions-manually-afebbe77d325

Github还刚刚发布了他们的GitHub Actions API,可用于构建触发器。您可以在这里找到API文档:https://developer.github.com/v3/actions/

GitHub官方的回应是他们正在考虑无条件重新运行操作,但目前还没有确认。您可以在Github社区中跟进任何更新:https://github.community/t5/How-to-use-Git-and-GitHub/Is-it-possible-to-manually-force-an-action-workflow-to-be-re-run/td-p/25336

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