作为一款开源的分布式图数据库产品,Nebula 所有的研发流程都在 GitHub 上运作。基于 GitHub 生态 Nebula 技术团队有一套 pr 的自动化流程:每次 pr 提上来的时候, pull request bot 跑一遍测试,看看这个 pr merge 到主分支以后是否可以保证当前的一些功能还可以继续正常运行。
这时候,问题出现了:每个 pr 上来一次都要跑一遍测试,这样的操作既费时又对测试机造成不必要的消耗。于是,Nebula 研发团队打算演变现有的 pr 合并机器人。
本文主要讲述如何在原先的设定下,优化设计,从而节省测试资源。
基于现有 bot 的实现思路,来开发一款新的 bot 优化 pr 合并。新的 bot 主要特点是,利用 github action 提供的 on schedule 功能,在每隔一段时间后可以自动执行所有 pull request 合并后的测试,这样一来就不需要每个 pull request 都跑一次 CI,节省了时间和性能消耗。若测试失败,则用随机剔除的方案剔除其中某个 pull request 然后继续执行测试,直到测试通过或者没用可用的 pull request 为止。随后将此次测试通过中的包含的 pull request merge 到主分支中,并且提供发送此次 merge 信息到钉钉群里的功能。
假设用户有一个新的 pull request 提上来,它的一生需要经历:
需要注意:
...
on:
schedule:
- cron: '* */1 * * *' --- 每小时跑一次
workflow_dispatch:
...
- name: Run merge script
uses: klay-ke/auto-merge-pr@master --- 该地址以后可能会改
id: merge-pr
with:
send-to-dingtalk-group: true
dingtalk-access-token: ${{ secrets.DINGTALK_ACCESS_TOKEN }}
dingtalk-secret: ${{ secrets.DINGTALK_SECRET }}
maintainer-team-name: ${{ secrets.MAINTAINER_TEAM_NAME }}
gh-token: ${{ secrets.GH_TOKEN }}
ci-command: 'bash ./build.sh'
参数 | 类型 | required | 默认值 | 描述 |
---|---|---|---|---|
send-to-dingtalk-group | boolean | 否 | false | 若为 true,则表明需要发送 merge 信息到钉钉群中,同时 dingtalk-access-token 和 dingtalk-access-token 字段需要提供 |
dingtalk-access-token | string | 当 send-to-dingtalk-group 为 true | 空字符串 | 钉钉群机器人的 access token |
dingtalk-secret | string | 当 send-to-dingtalk-group 为 true | 空字符串 | 钉钉群机器人的 secret. |
maintainer-team-name | string | 是 | None | maintainer team 的名字 |
gh-token | string | 是 | None | Github Token |
ci-command | string | 否 | None | ci 测试代码 |
可通过 ${{ steps.{action设置的id - 对应用例中的merge-pr}.outputs.{参数名} }}
在后续 step 中读取输出;
参数 | 类型 | 描述 |
---|---|---|
merge-info | string | 本次 merge 信息 |
error-log | string | 错误日志 |
pass-log | string | 日志信息 |
merged | boolean | 是否有 pull request 成功 merge |
以上。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。