自动化的高级追求: Prow 是什么?Kubernetes 为什么需要它

why? 故事是从这个 proposal 开始idea~ 🤖 OpenIM cicd robot machine proposal Prow是基于Kubernetes的CI/CD系统。作业可以由各种类型的事件触发,并将其状态报告给许多不同的服务。除了作业执行,Prow还以策略执行、通过 /foo 风格命令的聊天操作和自动PR合并的形式提供GitHub自动化。 有关 Golang 文档,请参阅 GoDoc。请注意,这些库仅供prow使用,我们不会尝试保留向后兼容性。 Kubernetes 专门为 Prow 提供了网页命令查询: https://prow.k8s.io/command-help 关于Prow如何运行作业的简要概述,请参阅 Prow作业的生命周期。 要查看Prow的常用用法和交互流,请参见拉取请求交互序列图。 hello world 最简单的一个上手案例莫过于 pull request 。 提出一个拉取请求(以下简称PR)。在PR正文中,可以随意添加区域标签(如果合适),例如 /area <AREA> 。标签列表在这里。也可以随意推荐一位评论者 /assign @theirname 。 一旦你的审阅者满意,他们会说 /lgtm ,这将应用 lgtm 标签,如果他们是OWNER,将应用 approved 标签。 approved 标签也将自动应用于所有者打开的PR。如果你和你的审阅者都不是OWNER,请 /assign 某个所有者。如果你的PR有 lgtm 和 approved 标签,没有任何 do-not-merge/* 标签,并且所有测试均通过,则PR将自动合并。 查看测试结果 Kubernetes TestGrid 显示历史测试结果 在 testgrid/config.yaml 配置自己的 testgrid 仪表盘 Gubernator 格式化每次运行的输出 PR Dashboard 查找需要注意的 PR Prow 安排测试并更新问题 Prow 响应 GitHub 事件、定时器和在 GitHub 评论中给出的手动命令。 prow dashboard 显示当前正在测试什么 在 config/jobs 配置 prow 运行新测试 Triage Dashboard 汇总故障 将故障集群在一起 搜索跨作业的测试失败 在特定的测试和/或作业的 regex 中过滤失败 Velodrome 指标跟踪作业和测试健康状况。 Kettle 进行收集,metrics 进行报告,velodrome 是前端。 功能和特性 prow 的功能很强大,甚至是比 actions 更加出众。可以测试、批处理、工件发布的作业执行。...

September 16, 2023 · 4 分钟 · 796 字 · 熊鑫伟,我

Github Actions 的高级使用技巧

创建 actions actions 是可以联合收割机以创建作业和自定义工作流的单个任务。您可以创建自己的操作,或使用和自定义GitHub社区共享的操作。 可以通过编写自定义代码来创建操作,这些代码可以以您喜欢的任何方式与您的存储库进行交互,包括与GitHub的API和任何公开可用的第三方API集成。 可以编写自己的操作以在工作流中使用,或与GitHub社区共享您构建的操作。要与所有人共享您构建的操作,您的存储库必须是公共的。 操作可以直接在机器上或Docker容器中运行。您可以定义操作的输入、输出和环境变量。 可以构建Docker容器、JavaScript和复合操作。操作需要一个元数据文件来定义操作的输入、输出和主入口点。元数据文件名必须为 action.yml 或 action.yaml 。有关更多信息,请参阅“GitHub操作的元数据语法。“ docker 容器操作 Docker容器用GitHub Actions代码打包环境。这创建了一个更加一致和可靠的工作单元,因为操作的使用者不需要担心工具或依赖项。 Docker容器允许您使用特定版本的操作系统、依赖项、工具和代码。对于必须在特定环境配置中运行的操作,Docker是理想的选择,因为您可以自定义操作系统和工具。 对操作进行发布管理 如果您正在开发供其他人使用的操作,我们建议使用发布管理来控制分发更新的方式。 用户可以期望操作的修补程序版本包括必要的关键修复程序和安全修补程序,同时仍与其现有工作流保持兼容。每当您的更改影响兼容性时,您应该考虑发布新的主版本。 在这种发布管理方法下,用户不应该引用操作的默认分支,因为它可能包含最新的代码,因此可能不稳定。 相反,您可以建议用户在使用您的操作时指定一个主要版本,并且仅在遇到问题时才将他们引导到更具体的版本。 要使用特定的操作版本,用户可以配置他们的GitHub操作工作流,以针对标签,提交的SHA或以发布命名的分支。 使用标签进行发布管理 我们建议使用标签进行操作发布管理。使用此方法,您的用户可以轻松区分主版本和次版本: 在创建发布标签(例如 v1.0.2 )之前,在发布分支(例如 release/v1 )上创建并验证发布。 使用语义版本控制创建发布 文件列表的右侧,单击Releases 页面顶部,单击草拟新版本。 要为发布选择标签,请选择选择标签下拉菜单。 如果您创建了一个新标签,请选择目标下拉菜单,然后单击包含您要发布的项目的分支。 在“描述此版本”字段中,为您的版本键入描述。如果您在描述中 @mention 任何人,发布的版本将包含一个贡献者部分,其中包含所有提及用户的头像列表。或者,您可以通过单击生成发行说明自动生成发行说明。 或者,要在您的版本中包含二进制文件(例如已编译的程序),请在二进制文件框中拖放或手动选择文件 或者,选择设置为最新版本。如果不选择此选项,将根据语义版本控制自动分配最新版本标签。 如果您准备好发布您的版本,请单击发布版本。要稍后处理该版本,请单击保存草稿。然后,您可以在存储库的发布提要中查看已发布或草稿的发布。有关详细信息,请参阅“查看存储库的版本和标签”。 移动major version标签(例如 v1 、 v2 ),指向当前版本的Git ref。例如: git tag -a v1.4 -m "my version 1.4" 引入新的主要版本标记( v2 ),用于将破坏现有工作流的更改。例如,更改操作的输入将是一个突破性的更改。 主要版本最初可以使用 beta 标签发布,以指示其状态,例如 v2-beta 。 -beta 标签可以在准备好时移除。 带有查询参数的发布表单自动化 要通过使用自定义信息自动填充新发布表单来快速创建发布,您可以将查询参数添加到发布表单页面的 URL。...

June 14, 2023 · 10 分钟 · 2030 字 · 熊鑫伟,我