我正在为项目存储库设置Github Actions。
工作流程包括以下步骤:
但是,我有两种不同的Kubernetes部署:一种用于开发,另一种用于生产。因此,我还有两个Github Action工作流程。
每次推送提交时,都会触发用于开发的Github Action工作流:
on:
push:
branches:
- master
但是我不想在我的生产工作流程中使用。我需要一个手动触发器,例如发送到生产版本按钮。我没有在文档中看到任何与之接近的东西。
是否可以在Github Actions中手动触发工作流程?
如何在Github Actions,Docker或Kubernetes上拆分我的开发和生产工作流程以实现我想要的?
答案 0 :(得分:18)
是否可以在Github Actions中手动触发工作流程?
您可能会考虑,from July2020:
GitHub操作:带有工作流_调度的手动触发器
(请注意:或多个工作流程,直至new Composite Run Steps,2020年8月)
您现在可以创建由新的
workflow_dispatch
事件手动触发的工作流程。
然后,您将在“操作”标签上看到一个“Run workflow
”按钮,可轻松触发运行。您可以选择运行工作流的分支。
文档中未提及的一件事:工作流必须存在于默认分支上,才能显示“
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 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。
原始答案:
可以通过调用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
生产工作流程:在从dev
到master
的拉取请求/合并中触发:
on:
pull_request:
branches:
- master