亚搏体育appGitLab CI : Get source branch after merge-request has been accepted

标签 git merge gitlab gitlab-ci branching-and-merging

我有一个主分支,应该只能通过将“release/xxxxx”分支 merge 到其中或将“hotfix/xxxxx”分支 merge 到其中来获得提交。

发布分支的管道构建 Docker 镜像并使用标签“beta”发布它。
发布分支的管道构建一个 docker 镜像并使用标签“hotfix”发布它。

master 的管道只需将“beta”重新标记为“stable”(当发布分支已 merge 到 master 中时)或“hotfix”重新标记为“stable”(当 hotfix 分支已 merge 到 master 中时)掌握)。然后,它还会为该版本创建一个新的 git 标签,并在 gitlab 中创建一个版本。最后,docker 镜像被部署。

目前发生以下情况:

  • 创建 merge 请求以将“release/xxxxx” merge 到“master”。
  • 管道自动启动(在接受并 merge merge 请求之前)。
  • docker 作业解析 CI_MERGE_REQUEST_SOURCE_BRANCH_NAME 变量以确定 merge 请求的源分支是发布分支。
  • 然后,docker 作业将“beta”重新标记为“latest”。
  • git tag 作业向项目添加版本标签和 gitlab 版本。
  • 部署作业会部署 Docker 镜像。

当 merge 请求最终被接受时,会发生以下情况:

  • 管道再次启动。
  • docker 作业解析的 CI_MERGE_REQUEST_SOURCE_BRANCH_NAME 现在为空,因此无法确定此 merge 的源分支。
  • docker 作业失败。

我认为很明显,我不想在接受 merge 请求之前运行所有这些作业(尤其是部署作业)。

但我想不出一种好方法,仅在接受 merge 请求后在主服务器上运行管道,然后仍然能够确定源分支。

最佳答案

仅使用 git 中存储的信息:

在接受 merge 请求后运行时,HEAD 提交应该是 merge 的结果,因此 HEAD^2 应该是被 merge 分支的头提交。

您可以获得以下信息:

  • 直接指向此提交的标签:

     git tag --points-at HEAD^2
    
  • 直接指向此提交的分支:

     git branch --points-at HEAD^2    # for local branches
     git branch -r --points-at HEAD^2 # for remote branches
    
  • 包含此提交的分支:

     git branch --contains HEAD^2    # for local branches
     git branch -r --contains HEAD^2 # for remote branches
    

使用 gitlab 设置的环境变量:

阅读 predefined variables doc page 后,我很惊讶没有找到表明接受 merge 请求后触发作业的变量。

您可以查看 gitlab 的 webhooks :Merge requests events ;这些应该提供足够的信息来识别 merge 请求被接受后涉及哪些分支。

[更新]你也可以使用gitlab的API,参见@BastienSander's answer

关于亚搏体育appGitLab CI : Get source branch after merge-request has been accepted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59877180/

相关文章:

windows - 如何在 Windows 上使用 SSH 详细模式运行 git 命令?

git - 增加 Github Enterprise 中 protected `master` 分支的代码覆盖率门

git - 推送到 Git (GitLab) 时出现错误 401

r - 如何将简单的 data.frame 附加到 R 中的 SpatialPolygonDataFrame?

即使 ssh 有效,Gitlab 也无法克隆存储库

git - 维护单一 react native 应用程序的付费和免费版本

visual-studio - TFS 分支与合并

python - 在 Python 中合并具有不同日期范围的多个列

Gitlab 中的 Redis 无法启动(断言失败的对象上下文)

kubernetes - 在 Kubernetes 上运行 Gitlab CI 运行程序时 pod 的挂起状态