当前位置: 首页 > 知识库问答 >
问题:

Github操作中的手动工作流触发器

胥康安
2023-03-14

我正在为项目存储库设置Github操作。

工作流程包括以下步骤:

  • 构建docker形象
  • 将图像推送到容器注册表中
  • 推出Kubernetes部署

然而,我有两种不同的Kubernetes部署:一种用于开发,另一种用于生产。因此,我还有两个Github操作工作流。

每次推送提交时,都会触发Github开发操作工作流:

on:
  push:
    branches:
    - master

但我不希望在我的生产工作流程中出现这种情况。我需要一个手动触发器,比如“发送到生产”按钮。我在文件中没有看到任何类似的东西。

是否有办法在Github操作中手动触发工作流?

如何在Github Actions、Docker或库伯内特斯上拆分我的开发和生产工作流程以实现我想要的?

共有3个答案

司空叶五
2023-03-14

更新:有关斜杠命令样式的“ChatOps”解决方案,请参阅斜杠命令调度操作。这可以允许您从发布和拉取请求注释中使用斜杠命令(例如部署)触发工作流。

下面是部署斜杠命令的基本示例REPO\u ACCESS\u TOKEN是一种范围有限的个人访问令牌

name: Slash Command Dispatch
on:
  issue_comment:
    types: [created]
jobs:
  slashCommandDispatch:
    runs-on: ubuntu-latest
    steps:
      - name: Slash Command Dispatch
        uses: peter-evans/slash-command-dispatch@v1
        with:
          token: ${{ secrets.REPO_ACCESS_TOKEN }}
          commands: deploy

可以在此工作流中处理该命令。

name: Deploy Command
on:
  repository_dispatch:
    types: [deploy-command]

有更多的选项和不同的设置。有关完整使用说明,请参阅斜杠命令调度。

原始答案:repository_dispatch工作流可以通过调用GitHub API手动触发,如下所示。

on:
  repository_dispatch:
    types: [production-deploy]
  • [用户名]是GitHub用户名
curl -XPOST -u "[username]:[token]" \
  -H "Accept: application/vnd.github.everest-preview+json" \
  -H "Content-Type: application/json" \
  https://api.github.com/repos/[username]/[repository]/dispatches \
  --data '{"event_type": "production-deploy"}'

桑坚
2023-03-14

编辑:

解释工作流调度使用的精彩推文:https://twitter.com/github/status/1321859709075394563?s=19

是否有办法在Github操作中手动触发工作流?

我有一个小黑客这样做...

使用Watch事件,您可以按star手动触发操作或取消存储库。工作流中事件的代码是:

on:
  watch
    types: [started]

我知道这很奇怪,但很有效!然而,如果是与潜在明星的公开回购,这并不是最好的方式。

如何在Github Actions、Docker或库伯内特斯上拆分我的开发和生产工作流程以实现我想要的?

在Github操作中,我的意思是,您可以执行多个工作流/作业,并按目标分支或事件进行筛选。您可以组合多个事件,例如触发推送工作流,并在午夜使用cron。

甄佐
2023-03-14

是否有办法在Github操作中手动触发工作流?

您可以考虑,从2020年7月起:

(注:或多个工作流,通过新的复合运行步骤,2020年8月)

现在,您可以创建使用新的工作流调度事件手动触发的工作流
然后,您将在“操作”选项卡上看到“运行工作流”按钮,使您能够轻松触发运行。

您可以选择在哪个分支上运行工作流。

philippe在评论中补充道:

文档中没有提到的一件事:工作流必须存在于默认分支上,才能显示“运行工作流”按钮
将其添加到此处后,您可以继续在其自己的分支上开发操作,并且使用按钮运行时更改将生效

文件如下:

此外,您还可以选择指定输入,GitHub将在UI中以表单元素的形式显示这些输入。工作流调度输入的指定格式与操作输入的格式相同。

例如:

on: 
  workflow_dispatch:
    inputs:
      logLevel:
        description: 'Log level'     
        required: true
        default: 'warning'
      tags:
        description: 'Test scenario tags'  

触发的工作流接收github中的输入。事件上下文。

例如:

jobs:
  printInputs:
    runs-on: ubuntu-latest
    steps:
    - run: |
        echo "Log level: ${{ github.event.inputs.logLevel }}"
        echo "Tags: ${{ github.event.inputs.tags }}" 

Shim在评论中补充道:

您可以将工作流\u调度添加到还有其他触发器的工作流中(如推送和/或调度)

例如:

on:
 workflow_dispatch:
 push:
   branches:
     - master
 pull_request:
   types: [opened, synchronize, reopened]
 类似资料:
  • 我开始使用GitHub Actions,并且能够为Elixir设置CI管道,操作构建和测试没有任何问题。我还想使用heroku操作部署应用程序,所以我继续添加了GitHub中可用的应用程序,但在这样做之后,我收到了以下错误: 无效的工作流文件每个步骤都必须定义一个用途或运行键 这是我的工作流程在添加heroku操作之前的样子: 这就是我添加heroku动作的方式 以下是错误以了解更多详细信息。

  • 我正试图通过遵循本教程,使用GitHub操作构建docker映像并将其推送到Amazon ECR 我正在尝试为此repo设置GitHub操作,因此我在<代码>中创建了一个新的工作流。github/workflows目录。 DockerFile已成功创建并生成。 现在,在创建

  • 我有以下GitHub操作的文件(删除了一些代码,以便更容易理解这个问题): 我经历了以下步骤: 在分支上进行一些提交,并推动这些更改 我期望GitHub Actions在第2项之后运行测试和部署阶段作业。但是相反,它只是再次运行,而没有运行。 如上所述,即使在推送到之后,它仍然在分支上运行,而不是在分支上运行。我有点假设这可能是由于一些奇怪的行为与快进合并。但是GitHub显然意识到我推动了,因为

  • 我刚刚开始为一个项目设置一个Github操作工作流。我试图在一个容器内运行工作流步骤,并使用以下工作流定义: 但工作流无法声明容器立即停止到期。 我尝试了很多图片,包括官方文档中描述的“alpine:3.8”图片,但容器停止了。 根据GitHub操作的工作流语法,在容器部分中:“一个容器,用于运行作业中尚未指定容器的任何步骤。”我的假设是容器将被启动,步骤将在Docker容器内运行。

  • 我有一个Github操作工作流,每小时、每小时触发一次。 当工作流运行时,它不会在计划的时间运行,即它不会在整点运行。延迟时间可能超过30分钟。我不知道这是为什么。 它不是工作流本身,因为当我在大约30秒内手动运行它时,它会执行。 有人能告诉我是什么原因造成了延误吗? 这是一个时区问题吗?即使如此,在两次连续的工作流运行之间也应该有一个固定的1小时间隔,但事实并非如此。 这是代码。 Github回

  • 我在GitHub中有一个包含多个服务的monorepo 我想在两个条件下同时构建它们(使用GitHub操作): 标记-使用标记名称构建图像() 分支main-使用带有缓存的标签构建图像。 我找不到如何创建通用工作流和修改参数(如函数)的方法。 我能想到的唯一解决方案是创建一个复合操作,如下所示: 但现在我遇到了一个问题,需要在两个工作流中指定服务的所有作业,例如: 主要分支机构工作流: 标记分支工