You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测GitLab仓库近60分钟内是否有Merge Request被合并?

实现GitLab流水线基于合并MR的条件触发

我希望基于特定条件触发流水线,仅当仓库在过去60分钟内有一个或多个Merge Request被合并时才创建该流水线。请问是否有办法实现这一检测?我已查阅Merge Requests API,但未找到相关特定内容。

当然可以实现,核心思路是在流水线启动前通过GitLab API检测过去60分钟内的合并MR记录,具体方案如下:

1. 用API检测合并MR的脚本实现

你可以在流水线的前置检查步骤里调用Merge Requests API,过滤出过去60分钟内已合并的MR。关键是给API传入这几个参数:

  • state=merged:只返回已合并的MR
  • updated_after:设置为当前时间往前推60分钟的UTC时间戳(避免时区误差)
  • per_page=1:只要能查到至少1条结果就够,不用返回所有数据,节省请求资源

示例脚本(可放在.gitlab-ci.yml的检查job中):

# 生成60分钟前的UTC格式时间
START_TIME=$(date -d "-60 minutes" --utc +%Y-%m-%dT%H:%M:%SZ)
# 调用API查询符合条件的MR数量
MERGED_MRS_COUNT=$(curl --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \
  "https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/merge_requests?state=merged&updated_after=$START_TIME&per_page=1" | jq '. | length')
# 无符合条件的MR则终止流水线
if [ "$MERGED_MRS_COUNT" -eq 0 ]; then
  echo "过去60分钟内没有合并的MR,终止流水线"
  exit 1
fi

注意:需要在项目的变量中配置GITLAB_TOKEN(令牌要有读取MR的权限,比如read_api权限),同时确保runner环境安装了curl和jq工具。

2. 结合GitLab CI规则实现条件触发

把上面的检查逻辑做成一个前置job,后续需要执行的任务通过needs依赖这个检查job,只有检查通过才会继续执行。如果是定时触发的场景(比如每小时跑一次),这种方式尤其适用:

stages:
  - pre_check
  - execute_task

check_recent_merged_mrs:
  stage: pre_check
  script:
    - START_TIME=$(date -d "-60 minutes" --utc +%Y-%m-%dT%H:%M:%SZ)
    - MERGED_MRS_COUNT=$(curl --header "PRIVATE-TOKEN: $GITLAB_TOKEN" "https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/merge_requests?state=merged&updated_after=$START_TIME&per_page=1" | jq '. | length')
    - if [ "$MERGED_MRS_COUNT" -eq 0 ]; then exit 1; fi
  tags:
    - your-runner-tag # 替换成你的runner标签

run_target_task:
  stage: execute_task
  script:
    - echo "执行目标任务..."
  needs: [check_recent_merged_mrs]
  rules:
    - if: '$CI_PIPELINE_SOURCE == "schedule"' # 仅定时触发时执行
      when: on_success

3. 关键注意点

  • 必须用UTC时间戳,否则时区差异可能导致检测结果不准确
  • 令牌权限要足够,避免API请求返回403错误
  • 如果不需要定时触发,也可以结合webhook等触发方式,在触发前执行相同的检查逻辑

内容的提问来源于stack exchange,提问作者Satish Lokhande

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 23:15:15