git - 如何为 CI 组织两个 git repos
问题描述
我有一个 git repo“core”和“project”repo,它使用“core”作为依赖。如果我想更改“核心”模块的一些 API 及其在“项目”中的用法,我会在 gitlab 中创建两个单独的拉取请求。但是我们的持续集成系统不能测试“项目”,直到“核心”被合并,如果“核心”包含 API 更改。我想要的是“项目”测试的可能性将在“核心”中的同一分支上进行。例如,如果我在“project”和“core”中创建了“feature-42”分支,“project”测试将在“core”的“feature-42”分支上开始。
现在我们有机会移动到 go 模块,但是很难总是在 go.mod 文件中指定直接提交哈希(很多可能出错)。看起来我们应该使用 monorepo,但我担心我们的项目可能会成为单体(考虑到我们没有非常合格的开发人员)。
我们如何组织我们的持续集成?
PS 我们也不想在版本中使用标签,因为人们并行工作,并且很难保持始终不递减的版本。
解决方案
您的go.mod
文件可以指定依赖项的显式提交——即使该提交在分支上!— 只要提交实际上已发布到该存储库。
因此,如果您在 的feature-42
分支上发布了一项功能core
并希望在 中使用该功能project
,您可以go get core@feature-42
在project
模块中运行,您应该获得包含该功能的版本。
(该go
命令通常知道如何将分支名称解析为特定的提交,因此您不需要明确命名提交哈希。但是,该go.mod
文件将记录具有解析哈希的伪版本。)
作为另一种选择,您可以go mod edit -replace
向 CI 系统添加一个命令,使其明确地将所选版本的core
模块替换为相关分支。
话虽如此,听起来您切换到 monorepo 可能会更简单,也许go.mod
在 repo 根目录下有一个文件,以便所有内容都同步进行版本控制。根据我的经验,避免 Go 项目变成单体的最好方法是使用internal
包,而不是单独的存储库。
推荐阅读
- python - 元组的元组
- queue - Apache Pulsar 消息传递语义
- java - Netbeans 中的 Selenium:包 org.openqa.selenium 不存在
- vue-component - 挂载钩子中的错误:“TypeError:无法读取未定义的属性 'allStage'”
- java - 尝试预填充房间数据库
- javascript - 仅对对象数组中的数值求和
- automated-tests - 性能测试/指标和工具
- javascript - 提交表单时如何停止Boostrap微调器
- javascript - 我在“Utilities.computeHmacSha256Signature”上做错了什么?
- python - Jupyter Notebook 中的交互式图像处理(测量图像中点之间的距离)