我有一个主分支,应该只能通过合并“release / xxxxx” 分支或合并“hotfix / xxxxx” 分支而获得提交。
发布分支的流水线构建了一个 docker 镜像,并使用“beta” 标签发布它。 发布分支的流水线构建了一个 docker 镜像,并使用“hotfix” 标签发布它。
主分支的流水线仅将“beta” 重新标记为“stable”(当发布分支合并到主分支时)或将“hotfix” 重新标记为“stable”(当热修复分支合并到主分支时)。然后还为该版本创建一个新的 git tag 和 gitlab 发布。最后,docker 映像被部署。
当前发生以下情况:
- 创建合并请求将“release / xxxxx” 合并到“master” 中。 - 流水线会在自动开始(在接受和合并合并请求之前)。 - Docker 作业解析 CI_MERGE_REQUEST_SOURCE_BRANCH_NAME 变量,以确定合并请求的源分支是否为发布分支。 - 然后,Docker 作业将“beta” 重新标记为“latest”。 - Git 标记作业将版本标记添加到项目中的 gitlab 发布中。 - 部署作业部署 Docker 映像。
当合并请求最终被接受时,将执行以下操作:
- 流水线再次启动。Docker作业解析了
Docker作业失败。
发布分支的流水线构建了一个 docker 镜像,并使用“beta” 标签发布它。 发布分支的流水线构建了一个 docker 镜像,并使用“hotfix” 标签发布它。
主分支的流水线仅将“beta” 重新标记为“stable”(当发布分支合并到主分支时)或将“hotfix” 重新标记为“stable”(当热修复分支合并到主分支时)。然后还为该版本创建一个新的 git tag 和 gitlab 发布。最后,docker 映像被部署。
当前发生以下情况:
- 创建合并请求将“release / xxxxx” 合并到“master” 中。 - 流水线会在自动开始(在接受和合并合并请求之前)。 - Docker 作业解析 CI_MERGE_REQUEST_SOURCE_BRANCH_NAME 变量,以确定合并请求的源分支是否为发布分支。 - 然后,Docker 作业将“beta” 重新标记为“latest”。 - Git 标记作业将版本标记添加到项目中的 gitlab 发布中。 - 部署作业部署 Docker 映像。
当合并请求最终被接受时,将执行以下操作:
- 流水线再次启动。
CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
,但现在该值为空,因此无法确定此合并的源分支。我认为很明显,在合并请求被接受之前,我不想运行所有这些作业(特别是部署作业)。
但我无法想到一种好的方法,在合并请求被接受后仅在主分支上运行管道,并仍然能够确定源分支。
gitlab-ci.yml
文件吗? - Hardik Upadhyay.gitlab-ci.yml
文件非常混乱,每个分支最多处理13个作业,并且远远超过我问题中提到的3个分支。更不用说它包括来自其他非公共项目的一堆文件,使用自定义的非公共docker镜像,并且严重依赖于在组和项目级别设置的环境变量。我无法分享所有这些内容,仅凭.gitlab-ci.yml
文件也无法帮助任何人。 - Forivin