如何配置GitLab CI Pipeline在develop合并到main后执行标签迁移脚本?
在GitLab CI中实现develop合并到main后自动迁移标签
要实现合并完成后触发标签迁移脚本,你不需要用merged results pipeline(那是合并前的预检查流水线),而是要配置main分支的push流水线,并通过条件判断确保只在develop合并过来时执行作业。
具体配置示例
在你的.gitlab-ci.yml中添加以下作业:
migrate-tags: stage: deploy # 根据你的流水线阶段调整,比如build、post-deploy等 only: - main script: # 验证最近的提交是否是从develop合并过来的合并提交 - | # 获取develop分支的最新提交哈希 DEVELOP_HASH=$(git rev-parse origin/develop) # 检查最近的合并提交是否包含develop的哈希作为父提交 if git log --merges -1 --pretty=format:"%p" | grep -q "$DEVELOP_HASH"; then echo "开始执行标签迁移..." # 替换成你的实际标签迁移脚本,示例: # 1. 获取develop上的所有标签,同步到main分支(强制覆盖同名标签) # git fetch origin develop --tags # git tag -l | xargs -I {} git tag -f {} main # git push origin --tags -f else echo "跳过标签迁移:最新提交不是从develop合并的" exit 0 fi tags: - your-runner # 替换为你的GitLab Runner标签(如果需要指定)
关键说明
- 分支限制:
only: [main]确保作业只在main分支的流水线中运行,避免其他分支触发。 - 合并来源校验:通过git命令校验最近的合并提交是否来自develop分支,避免main分支直接push代码时误触发脚本。
- 权限配置:确保执行作业的Runner拥有仓库的读写权限(需要能拉取develop分支、推送标签到远程仓库),可以在CI/CD变量中配置带有推送权限的
GIT_TOKEN。
替代方案(如果不需要严格校验来源)
如果只要main分支有新提交(不管是否来自develop)就执行迁移,可以简化配置,去掉脚本中的校验逻辑:
migrate-tags: stage: deploy only: - main script: echo "执行标签迁移..." # 你的迁移脚本
内容的提问来源于stack exchange,提问作者smxh
相关产品推荐
相关产品推荐

