如何创建警报系统汇总多仓库未合并MR至指定渠道并统一查看?
多仓库合并请求统一监控与告警方案
一、统一查看指定多仓库的待处理合并请求
GitHub 场景
- 全局搜索快速查询:直接在GitHub搜索栏输入筛选语法,跨仓库查看待处理PR:
- 查看组织下所有仓库:
is:pr is:open user:<你的组织名> - 指定多个仓库:
repo:org/repo1 repo:org/repo2 is:pr is:open
搜索结果支持排序、筛选作者/标签等,可保存为书签方便快速访问。
- 查看组织下所有仓库:
- 自定义项目仪表板:创建GitHub Project,添加筛选规则
is:pr is:open,自动同步符合条件的PR,还能按仓库、优先级分组整理,直观展示全局待处理状态。 - 命令行批量查询:使用GitHub CLI(
gh)批量拉取数据,适合本地处理场景:gh pr list --repo org/repo1 --repo org/repo2 --state open --format "table"
GitLab 场景
- 全局/群组级查看:
- 跨指定仓库搜索:在GitLab搜索栏输入
merge_requests state:opened project:<org/repo1> project:<org/repo2> - 同群组仓库:直接进入群组的「合并请求」页面,默认展示群组内所有项目的待处理MR,支持按状态、更新时间筛选。
- 跨指定仓库搜索:在GitLab搜索栏输入
- 命令行批量查询:使用GitLab CLI(
glab)批量获取:glab mr list --project org/repo1 --project org/repo2 --state opened --format "table"
二、新/未合并MR的告警推送(Slack/邮件/群组)
GitHub 实现方案
定时汇总告警(GitHub Actions)
编写Workflow定时拉取指定仓库的未合并PR,推送到Slack或邮件。示例配置:
name: PR 监控与告警 on: schedule: - cron: '0 9 * * 1-5' # 工作日早9点推送 workflow_dispatch: # 支持手动触发 jobs: send_alert: runs-on: ubuntu-latest steps: - name: 安装GitHub CLI run: sudo apt install gh -y - name: 获取待处理PR列表 id: pr_data env: GH_TOKEN: ${{ secrets.GH_TOKEN }} run: | PR_LIST=$(gh pr list --repo org/repo1 --repo org/repo2 --state open --json title,url,author,updatedAt \ --jq '.[] | "- \(.author.login) 提交于 \(.updatedAt[:10]): [\(.title)](\(.url))"' | paste -sd "\n" -) echo "pr_list=$PR_LIST" >> $GITHUB_OUTPUT - name: 推送到Slack uses: slackapi/slack-github-action@v1 with: slack-message: | 🚨 今日待处理合并请求汇总: ${{ steps.pr_data.outputs.pr_list }} env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
- 配置说明:在仓库「Settings > Secrets and variables > Actions」中添加
GH_TOKEN(需repo权限)和SLACK_WEBHOOK_URL。 - 邮件推送替代:可替换Slack步骤为邮件动作,比如使用
actions/send-mail,配置SMTP信息发送到指定邮箱群组。
新MR实时告警
在每个目标仓库配置「Pull Request」Webhook,触发事件选择「Opened」,直接将新PR通知推送到Slack/邮件(可使用GitHub自带的Slack集成模板快速配置)。
GitLab 实现方案
定时汇总告警(GitLab CI/CD)
编写定时Pipeline批量拉取MR数据并推送:
pr_monitor_alert: schedule: - cron: '0 9 * * 1-5' # 工作日早9点执行 script: - | # 安装GitLab CLI curl -s https://raw.githubusercontent.com/profclems/glab/trunk/scripts/install.sh | sudo bash # 获取待处理MR列表 MR_LIST=$(glab mr list --project org/repo1 --project org/repo2 --state opened --format "detail" | grep -E "(Title|Author|URL)" | paste -sd "\n" -) # 推送到Slack curl -X POST -H "Content-type: application/json" \ --data "{\"text\":\"🚨 今日待处理合并请求汇总:\n$MR_LIST\"}" \ $SLACK_WEBHOOK_URL variables: SLACK_WEBHOOK_URL: $SLACK_WEBHOOK_URL # 在项目CI/CD变量中配置 tags: - docker
新MR实时告警
- 单个仓库:进入仓库「Settings > Webhooks」,添加Webhook,触发事件选择「Merge requests events」,勾选「Opened」,配置Slack/邮件接收地址。
- 群组级:若仓库都在同一群组,可配置群组级Webhook,一次性覆盖所有子项目的MR事件通知。
注意事项
- 权限配置:确保使用的Token(GitHub/GitLab)拥有目标仓库的读取权限,避免查询失败。
- 定制化调整:可根据需求修改告警频率、筛选规则(比如只提醒超过24小时未处理的MR)、通知格式。
- 邮件推送细节:使用邮件推送时,需确保SMTP服务配置正确,避免被标记为垃圾邮件。
内容的提问来源于stack exchange,提问作者Hussain Akhtar Wahid 'Ghouri'
相关产品推荐
相关产品推荐

