Github Actions中的手动工作流程触发器

时间:2019-11-19 11:33:41

标签: docker kubernetes devops github-actions

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

工作流程包括以下步骤:

  • 构建docker映像
  • 将图像推送到容器注册表
  • 部署Kubernetes部署。

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

每次推送提交时,都会触发用于开发的Github Action工作流:

on:
  push:
    branches:
    - master

但是我不想在我的生产工作流程中使用。我需要一个手动触发器,例如发送到生产版本按钮。我没有在文档中看到任何与之接近的东西。


是否可以在Github Actions中手动触发工作流程?

如何在Github Actions,Docker或Kubernetes上拆分我的开发和生产工作流程以实现我想要的?

5 个答案:

答案 0 :(得分:18)

是否可以在Github Actions中手动触发工作流程?

您可能会考虑,from July2020

GitHub操作:带有工作流_调度的手动触发器

(请注意:或多个工作流程,直至new Composite Run Steps,2020年8月)

您现在可以创建由新的workflow_dispatch事件手动触发的工作流程。
然后,您将在“操作”标签上看到一个“ Run workflow”按钮,可轻松触发运行。

https://i2.wp.com/user-images.githubusercontent.com/1865328/86147571-2de93700-babf-11ea-8a08-e4beffd3abe9.png?ssl=1

您可以选择运行工作流的分支。

philippe添加in the comments

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

文档继续进行:

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

例如:

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

触发的工作流程在github.event上下文中接收输入。

例如:

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

答案 1 :(得分:3)

更新:有关斜杠命令样式“ ChatOps”的解决方案,请参见slash-command-dispatch操作。这样一来,您就可以通过发布中的斜杠命令(例如/deploy)触发工作流程并提取请求注释。

这是deploy斜杠命令的基本示例。 REPO_ACCESS_TOKEN是范围为Personal Access Tokenrepo

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]

还有更多选项和不同的设置。有关完整的使用说明,请参见slash-command-dispatch

原始答案: 可以通过调用GitHub API手动触发repository_dispatch工作流程。

on:
  repository_dispatch:
    types: [production-deploy]
  • [username]是GitHub用户名
  • [token]repo范围内的Personal Access Token
  • [repository]是工作流所在的存储库的名称。
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"}'

答案 2 :(得分:3)

  

是否可以在Github Actions中手动触发工作流程?

我有一点技巧……

使用watch事件,您可以通过加注或取消加注存储库来手动触发操作。您的工作流程中事件的代码为:

on:
  watch
    types: [started]

我知道这很奇怪,但是有效!但是,如果它是具有潜在明星身份的公共回购协议,则不是最好的方法。


  

如何在Github Actions,Docker或Kubernetes上拆分开发和生产工作流程以实现我想要的?

在Github Actions中,我的意思是,您可以执行多个工作流程/作业,并按目标分支或事件进行过滤。您可以合并多个事件,例如在午夜触发 push和cron 的工作流程。

答案 3 :(得分:2)

GitHub加密文档无法澄清的是,您可以在for (NSString *str in NSArray) {}; 下拥有多个工作流程文件,每个文件都有自己的触发器。例如,我有一个工作流,该工作流在每个推和拉请求上构建并运行测试,另一个工作流是手动触发以发布工件。

.github/workflows

答案 4 :(得分:1)

尽管Sarah's post是对原始问题的最接近,最简单的回答,但它有点hacky,因此我们最终通过创建一个dev分支来使用以下触发器来最终结束:

  • 开发工作流程:在dev分支上进行推送时触发:

    on:
      push:
        branches:    
          - dev
    
  • 生产工作流程:在从devmaster的拉取请求/合并中触发:

    on:
      pull_request:
        branches:    
          - master