dubbo-go v3 版本 go module 踩坑记
该问题源于我们想对 dubbo-go 的 module path 做一次变更 , 使用 dubbo.apache.org/dubbo-go/v3
替换之前的 github.com/apache/dubbo-go
。 首先 , 我们做了路径映射 , 在 dubbo.apache.org 下放置了一个 dubbogo/v3 文件 , 内容如下:
其次 , 我们修改了 go.mod 的 module 和对应的所有 import , 并修改了所有子模块引用 dubbo-go 使用的 module 路径 。 在做完上述的修改后 , 我们提 PR 时 , 发现 CI 失败 , 经过进一步的日志排查 , 我们确定是 CI 在跑集成测试时发生了错误 , 具体的错误提示信息如下:
这一段的执行逻辑是希望利用 docker 对 dubbo-go 中的集成测试内容构建镜像 , 并启动容器进行测试 , 该镜像打包所用的 Dockerfile 路径在 github.com/apache/dubbo-go/test/integrate/dubbo/go-server
目录下 , 对照错误日志的 STEP 标识 , 我们可以定位到具体错误发生下面的两个步骤:在 STEP 9 中 , 我们使用 go mod edit -replace
替换了 dubbogo 的依赖路径 , 将其替换为发起 PR 请求的仓库地址和 commit id 。 在此基础上 , 当镜像构建跑到 STEP11, 尝试使用 go mod tidy
拉包时发生了错误 。 回过头查看错误日志 , 我们可以发现:由于我们只指定了 commit id , 因此在 go mod 实际运行过程中 , 它会为我们生成一个假定版本号(关于假定版本号的更多说明可以查看本文最后的问题拓展) , 这个假定版本号抓取远程仓库的最新有效 tag 为 v1.4.1【注:此处远程仓库为 github.com/Mulavar/dubbo-go , 这是我自己的 dubbo-go 分支 , 该分支拉取 fork 的时间比较早 , 其最后 tag 是 v1.4.1】 , 并自增为 v1.4.2 , 主版本是 v1 。 但在先前 , 我们的 dubbogo module path 是声明为 dubbo.apache.org/dubbogo/v3
, 主版本是 v3 , 这导致了 前后的依赖主版本分别是 v3 和 v1, 出现了不一致 , 实际拉取 dubbogo 依赖的时候出错 。 这一步 , 我们使用 时将一个 v3 版本的 go module 替换成了一个 v1 版本的 module , 导致主版本不一致发生错误 , 因此我们只需在替换依赖路径时指定替换后的 module 主版本也为 v3 即可 , 我们在 go mod edit -replace
后的模块依赖路径后也加上 v3 后缀如下所示 。 修改前:? 修改后:
修复该问题后我们提交代码查看 CI , 在 STEP 8 打印的日志信息中 , 可以看到替换后的 dubbogo 路径多了 v3 , 并且在拉包的时候跟的版本号(
- |【康哥日精进】第162篇:php版本过高引起ecshop报错和不显示验证码
- 英伟达|英伟达推出DLSS 2.3版本,并发布图像比较与分析工具
- 大疆|华为P50 Pro最新售价确认,全系跌至新低价,512GB版本更有诚意
- iphone13 pro|终于知道为什么懂的人都买iPhone13Pro了,256G版本太香了
- |发布不到2个月跌价300元,128G版本苹果新机重回低价
- 汽车|我的小米手机还挺耐用的,没有坏过一台,现在买pro版本的很够用
- 操作系统|应对华为?中兴发布全新版本国产操作系统
- harmonyos|Harmony OS用户已破亿!各大品牌陆续加入,明年首季推出3.0版本
- 苹果|iPhone13全系版本重回低价,没白等!最新售价已经确认!
- 荣耀|荣耀60系列遭曝光:分为三个版本,具体参数也跟着出炉了