自动将Master合并到Gitlab上的Develop分支

3
在Gitlab中出现问题,因为develop分支逐渐偏离master。例如,如果有人在master上应用了一个热修复,它不会自动出现在develop中,这可能会创建冲突。
是否有一种方法可以在CI-CD过程中自动同步develop与master?
相关:Automatically syncing develop with master on merge

5
如果有人在主分支上应用了一个热修复,它不会自动出现在开发分支中,这可能会造成冲突。那么为什么不让你合并热修复分支到开发分支呢?这是正确的Git工作流程。为什么要让机器来做呢? - matt
2
@matt,我们已经在主分支上合并了热修复分支,我们想要将主分支合并到开发分支或者将热修复分支合并到开发分支。如果我们自动执行这一步骤,可以减少工作量。这不就是自动化的意义所在吗?还是我理解错了? - Fariman Kashani
1个回答

2
建立在@matt的评论之上,我不知道Gitlab或其他SCM/CI/CD系统中是否有内置的方法来完成这个操作,但如果你真的需要这样做,有几个选择:
  1. 你可以在Gitlab中注册一个Webhook,当主分支有推送时发送一个钩子,然后接收钩子的地方可以克隆代码库,合并到开发分支,再将更改推回远程。
  2. 另一种选择是启动一个小型的流水线作业,通过API调用检出开发分支,合并并将更改推送到远程。这仍然需要第一种选项中的Webhook,但不需要克隆。
但是,如果有多个人在项目上工作,这样做可能会带来麻烦。比如说,你有一个人在开发分支上工作,无论是开发工作、测试还是其他,然后有一个推送到主分支,该推送自动合并到开发分支。这现在会破坏那个人的工作。不过,如果你是项目中唯一的人,这也许没问题。
作为自动合并的替代方案,我在我的项目中采取了一种方法,即添加一个简单的流水线作业,在主分支有推送时发送一个Slack通知。它看起来像这样:
Merge Notification:
  stage: "Send Notifications"
  image: centos:7
  only:
    - main
  needs: []
  variables:
    GIT_STRATEGY: none
  script:
    - 'curl -X POST --data-urlencode "payload={\"text\": \"There has been an update to the _*$CI_COMMIT_REF_NAME*_ branch. Please be sure to rebase your non-merged code as soon as possible!\", \"icon_emoji\": \":gitlab:\"}" https://hooks.slack.com/services/redacted'

我在这里使用了centos:7镜像,但通常情况下我会使用alpine镜像,因为它的大小不到50MB。我很久以前就创建了这个任务,所以我不记得为什么要使用centos。其他镜像在这里也应该可以正常工作,所以你需要进行实验。
  • only: main子句表示只有当分支为main时,此作业才会被添加到流水线中。

  • needs: []子句是Gitlab相对较新的功能。它允许您定义非循环管道,这意味着您可以无序运行作业。这个例子不需要从流水线早期的其他作业“needs”,因此它可以安全地在流水线开始后立即运行,而不考虑阶段。如果您有足够的运行程序可用(或者如果使用Gitlab.com,则有足够的时间),所有符合条件的作业都可以同时运行,跨越所有阶段,具体取决于它们的needs

  • 接下来,我们告诉作业我们根本不需要克隆/获取项目。变量GIT_STRATEGY: none的意思是不要从Gitlab克隆项目。

  • 最后,我们只运行标准的curl命令来向特定的Slack频道发送消息。如果您不使用slack,可以将其替换为任何其他服务。


1
与Slack机器人的集成是一个很好的解决方案,谢谢。 - Vlad Gheorghe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接