合并至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
相关产品推荐
相关产品推荐

