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

合并至master分支成功后,如何触发GitLab CI/CD流水线?

解决GitLab CI在合并至master分支时触发流水线的问题

首先,你当前配置里的only: master其实已经会在代码合并到master分支时触发流水线——因为当合并请求完成后,GitLab会在master分支上生成一个新提交,这会自动触发针对master分支的流水线。不过如果你的流水线没按预期触发,或者你想更明确地指定触发逻辑,可以用GitLab推荐的rules语法替代旧的only/except,配置会更清晰灵活。

下面是修改后的配置,确保直接推送master分支和合并请求合并至master两种场景都能触发部署流水线:

before_script:
  - apt-get update -qq
  - apt-get install -qq git
  # Setup SSH deploy keys
  - 'which ssh-agent || ( apt-get install -qq openssh-client )'
  - eval $(ssh-agent -s)
  - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
  - mkdir -p ~/.ssh
  - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
deploy_staging:
  type: deploy
  environment:
    name: staging
    url: domain.com
  script:
    - ssh user@domain.com "cd /server/directory && git fetch && git pull origin master && exit"
  rules:
    - if: '$CI_COMMIT_BRANCH == "master"'
      when: always

补充说明:

  • rules是GitLab CI/CD的现代语法,比only/except支持更复杂的条件判断,可读性也更强。
  • 这里的if: '$CI_COMMIT_BRANCH == "master"'会匹配所有发生在master分支上的触发事件,包括直接推送代码、合并请求完成后的自动提交。
  • 如果你坚持想用旧的only语法,也可以调整为下面的写法,但要注意:加上merge_requests会让这个job在MR的源分支也运行,如果你只想在合并到master后才执行,还是用rules的方式更精准:
# 旧语法的增强版本
only:
  - master
  - merge_requests

另外,你可以检查下GitLab项目的设置:确保Settings > CI/CD > General pipelines里没有禁用master分支的流水线,同时合并请求的配置中也没有阻止合并后触发流水线的选项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:44:23