Ant*_* C. 27 continuous-integration docker kubernetes github-actions
我正在为项目存储库设置 Github Actions。
工作流程包括以下步骤:
但是,我有两种不同的 Kubernetes 部署:一种用于开发,一种用于生产。因此,我还有两个 Github Action 工作流。
每次推送提交时都会触发用于开发的 Github Action 工作流:
on:
push:
branches:
- master
Run Code Online (Sandbox Code Playgroud)
但我不希望在我的生产工作流程中出现这种情况。我需要一个手动触发器,比如发送到生产按钮。我在文档中没有看到任何与此接近的内容。
有没有办法在 Github Actions 中手动触发工作流?
我如何在 Github Actions、Docker 或 Kubernetes 上拆分我的开发和生产工作流以实现我想要的?
Von*_*onC 23
有没有办法在 Github Actions 中手动触发工作流?
您可能会考虑,从 2020 年 7 月开始:
GitHub 操作:使用 workflow_dispatch 手动触发
(注意:或多个工作流,通过新的复合运行步骤,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'
Run Code Online (Sandbox Code Playgroud)
触发的工作流接收
github.event上下文中的输入。例如:
jobs:
printInputs:
runs-on: ubuntu-latest
steps:
- run: |
echo "Log level: ${{ github.event.inputs.logLevel }}"
echo "Tags: ${{ github.event.inputs.tags }}"
Run Code Online (Sandbox Code Playgroud)
您可以添加
workflow_dispatch到还有其他触发器(如on push和/或schedule)的工作流例如:
Run Code Online (Sandbox Code Playgroud)on: workflow_dispatch: inputs: logLevel: description: 'Log level' required: true default: 'warning' tags: description: 'Test scenario tags'
Sar*_*ane 19
编辑:
解释工作流调度使用的精彩推文:https : //twitter.com/github/status/1321859709075394563?s=19
有没有办法在 Github Actions 中手动触发工作流?
我有一个小技巧可以这样做......
使用 watch 事件,您可以通过为 repo 加星标或取消星标手动触发操作。工作流中事件的代码是:
on:
watch
types: [started]
Run Code Online (Sandbox Code Playgroud)
我知道这很奇怪,但它有效!尽管如此,如果它是具有潜在明星的公共回购,这并不是最好的方式。
我如何在 Github Actions、Docker 或 Kubernetes 上拆分我的开发和生产工作流以实现我想要的?
我的意思是,在 Github Actions 中,您可以执行多个工作流/作业并按目标分支或事件进行过滤。您可以组合多个事件,例如在午夜触发推送工作流和 cron。
更新:有关斜杠命令样式的“ChatOps”解决方案,请参阅斜杠命令调度操作。这可以允许您使用斜杠命令(例如/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
Run Code Online (Sandbox Code Playgroud)
可以在此工作流中处理该命令。
name: Deploy Command
on:
repository_dispatch:
types: [deploy-command]
Run Code Online (Sandbox Code Playgroud)
还有更多的选项和不同的设置。有关完整的使用说明,请参阅slash-command-dispatch。
原始答案:repository_dispatch可以通过调用 GitHub API 来手动触发工作流,如下所示。
on:
repository_dispatch:
types: [production-deploy]
Run Code Online (Sandbox Code Playgroud)
[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"}'
Run Code Online (Sandbox Code Playgroud)
使用当前 Github Action 产品解决此问题的另一种方法production是在需要部署时从 master创建一个分支并在该production分支上触发部署操作。该production分支是实质上的反射镜master。
on:
push:
branches:
- master
Run Code Online (Sandbox Code Playgroud)
只要有对 master 的提交,就会发生开发构建/推送。
on:
push:
branches:
- production
Run Code Online (Sandbox Code Playgroud)
在发布计划的某个时刻,您可以将 PR 提升到production分支。这将负责产品构建/部署。
虽然Sarah 的帖子是对原始问题最接近和最简单的答案,但它有点 hacky,所以我们最终创建了一个dev分支来使用以下触发器:
开发工作流程:在dev分支上进行推送时触发:
on:
push:
branches:
- dev
Run Code Online (Sandbox Code Playgroud)生产工作流程:在从devto发出拉取请求/合并时触发master:
on:
pull_request:
branches:
- master
Run Code Online (Sandbox Code Playgroud)编辑以获取更多详细信息/解释。
您可以做的一件事就是致电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!"
Run Code Online (Sandbox Code Playgroud)
您可以按照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
Run Code Online (Sandbox Code Playgroud)
同时,我也想分享一个我和一个朋友一直在做的小项目,它解决了这个问题。
ActionsPanel 使用相同的repository_dispatchAPI,但使用 GitHub 应用程序令牌来实现,因此您无需担心管理自己的 PAT。这也使得在多人团队之间触发您的操作变得更加容易。
根据用户请求和反馈,我们内置了指定要发送到哪个分支的功能repository_dispatch,甚至还内置了一种在您想要执行操作时注入参数的方法。
您可以使用保留在存储库中的声明性 yaml 文件来配置按钮,ActionsPanel 将读取该文件并动态创建 UI 以供您触发操作。
| 归档时间: |
|
| 查看次数: |
14742 次 |
| 最近记录: |