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


9

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

工作流程包括以下步骤:

  • 建立Docker映像
  • 将映像推送到容器注册表
  • 推出Kubernetes部署

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

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

on:
  push:
    branches:
    - master

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


有没有办法在Github Actions中手动触发工作流程?

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

Answers:


8

有没有办法在Github Actions中手动触发工作流程?

我有一点技巧可做...

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

on:
  watch
    types: [started]

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


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

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


7
哈哈,这很棒:> repository_dispatch除此之外,可以结合watch使用if: github.actor == 'hackerman'以过滤掉随机的陌生人。还是更好- if: github.actor == github.event.repository.owner.login额外的“安全性”:D
Samira

1
哈哈谢谢!是个好主意,我要在有时间的时候尝试一下!:D
莎拉·阿德雷曼

1
完美,我认为这是最好的方法,但是还没有正式实施。
Antoine

5

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

这是一个deploy斜杠命令的基本示例。REPO_ACCESS_TOKEN是有repo范围的个人访问令牌

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

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

on:
  repository_dispatch:
    types: [production-deploy]
  • [username] 是GitHub用户名
  • [token]是有repo范围的个人访问令牌
  • [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"}'

1
对于感兴趣的任何人,可以将单个工作流程用于多个调度。发送的event_type内容可用于github.event.action,可用于工作流程,因此可以在需要时启用/禁用特定的作业/步骤。PS:并不是真的需要PAT,可以使用curl -u "[username]:[password]"甚至也-u "[username]"可以使用curl(在第二种情况下curl会提示用户输入密码);在某些情况下更易于使用(例如,在编写以用户名作为输入的脚本或打算由技术含量较低的用户使用的脚本时)。
萨米拉

2

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

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

    on:
      push:
        branches:    
          - dev
    
  • 生产工作流程:从dev向发出拉取请求/合并时触发master

    on:
      pull_request:
        branches:    
          - master
    

1

编辑以获得更多详细信息/说明。

您可以做的一件事是致电repository_dispatch。您可以在repository_dispatch 此处查看GitHub文档以使用。

例如,如果您的GitHub Actions工作流程如下所示:

on:
  repository_dispatch:
    types: [run_tests]
name: Run tests
jobs:
  test:
    name: Run your tests
    runs-on: ubuntu-latest
    steps:
      - run: |
          echo "I just ran all your tests!"

您可以按照GitHub v3 API文档中说明的步骤创建存储库调度事件。

首先,在GitHub上创建个人访问令牌(PAT)进行身份验证。

然后,您可以curl像这样运行:

curl \
  -H "Authorization: token $YOUR_PAT" \
  --request POST \
  --data '{"event_type": "run_tests"}' \
  https://api.github.com/repos/$USER/$REPOSITORY/dispatches

同时,我还想分享一个我正在与一个伙伴一起解决这个确切问题的小项目。

https://www.actionspanel.app/

ActionsPanel使用相同的repository_dispatchAPI,但是使用GitHub App令牌这样做,因此您无需担心管理自己的PAT。这也使跨多人团队触发您的行动变得更加容易。

根据用户的请求和反馈,我们内置了一些功能以指定要将其发送repository_dispatch到的分支,并且甚至构建了一种在您要执行操作时注入参数的方式。

您使用在回购中保留的声明性yaml文件配置按钮,ActionsPanel将读取该文件并动态创建UI来触发您的操作。


0

当前Github Action产品解决此问题的另一种方法production是在需要部署时从master 创建分支,并在production分支上触发部署操作。该production分支实质上是的镜像master

on:
  push:
    branches:    
      - master

只要有对主服务器的提交,就可以进行开发构建/推送。

on:
  push:
    branches:    
      - production

在发布时间表的某个时刻,您可以将PR提高到production分支。这将负责产品的构建/部署。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.