惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
MyScale Blog
MyScale Blog
N
News and Events Feed by Topic
IT之家
IT之家
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
有赞技术团队
有赞技术团队
T
The Blog of Author Tim Ferriss
The Cloudflare Blog
博客园 - 聂微东
Apple Machine Learning Research
Apple Machine Learning Research
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
美团技术团队
V
Visual Studio Blog
M
MIT News - Artificial intelligence
V
V2EX
博客园_首页
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Blog — PlanetScale
Blog — PlanetScale
F
Full Disclosure
H
Help Net Security
MongoDB | Blog
MongoDB | Blog
博客园 - 叶小钗
S
SegmentFault 最新的问题
博客园 - 三生石上(FineUI控件)
D
Docker
Engineering at Meta
Engineering at Meta
博客园 - Franky
aimingoo的专栏
aimingoo的专栏
Jina AI
Jina AI
N
Netflix TechBlog - Medium
宝玉的分享
宝玉的分享
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
云风的 BLOG
云风的 BLOG
博客园 - 司徒正美
I
InfoQ
G
Google Developers Blog
L
LangChain Blog
F
Fortinet All Blogs
博客园 - 【当耐特】
Hugging Face - Blog
Hugging Face - Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
WordPress大学
WordPress大学
A
Arctic Wolf
Martin Fowler
Martin Fowler
G
GRAHAM CLULEY
L
LINUX DO - 热门话题
C
Cisco Blogs
Y
Y Combinator Blog
罗磊的独立博客

Hunsh's Blog

生成个人的 Github PR List 如何选择合适的加密手段 Nginx SNI Proxy 如何优雅导入 k8s.io/kubernetes Make Go mod and Git to use specify .netrc 多架构镜像的体积优化 使用 buildkit 进行多架构构建并提取产物 如何修改镜像 layer(以 sourcemap-less grafana 为例) acme.sh 自动化 Google CA 申请证书 微信小程序嵌入任意公众号文章 go serve http and https on same port typecho 迁移到 hexo 实现 hexo 文章和资源在同一目录下 golang mitm 遇到的问题 流式数据专用的 mine-type Golang 正向代理对于 Host 的处理 (RFC 7230) 分享 MacOS 的一些系统fix脚本(dns、sleep) prometheus rate/increase/delta/sum等函数不符合预期或出现小数的原理 [油猴脚本] USTB Everywhere 为校外访问添加访问任意网站的能力
k8s && bazel 项目从 go1.20 升级 go1.21
2023-11-30 · via Hunsh's Blog

go1.20 -> go1.21 的变化就不细说了,release note 在这 https://tip.golang.org/doc/go1.21
主要是 bazel 构建相关的升级,还是值得留下一些文字记录。(本文仓库的 bazel 构建在初期借鉴了 https://github.com/kubernetes/repo-infra

go 版本的升级很简单,go.mod 修改 1.201.21 即可。go1.21 需要使用 rules_go >= 0.41.0,而 rules_go 0.41.0 又需要 gazelle >= 0.30.0。
一整套工具链都需要升级。

rules_gogazellerelease note,就可以看到这个版本之后需要手动导入 googleapis 依赖了,有例子,依葫芦画瓢即可。如果使用的 proto 较多,可以善用 github search 或者 gazellegit history

其实仅仅到这里就没有文字记录的必要了,坑在后面。

有部分很老的带 proto 的依赖需要手动添加 googleapisdirectives,不想仓库直接写在 BUILD.bazel 就可以。这需要自行写在 go_repositorybuild_directives 里面。

然后就是更坑的。

当以上问题解决之后,update-bazel.sh 执行正常,但是 verify-bazel.shgazelle fix --mode=diff)跪了,会提示所有与 go 相关的 rules 都需要清除。换个说法就是在 gazelle 视角里面似乎已经没有任何 go 代码了。

为此我创建了一个最小复现仓库,使用不同版本的 gazelle 进行测试,最终找到了 bazelbuild/bazel-gazelle#1384

由于 verify-bazel.sh 面对的文件并非直接来自于当前上下文而是 filegroup all-srcs。这个 commit 使 gazelle 不再读取任何软链接内容,而 filegroup 就是软链接构建的,所以在 gazelle 视角里面就没有任何文件了。

具体的修复可以看 kubernetes/repo-infra#250

嗯其实还有一个坑,很隐蔽,上线生产两个周才被发现,来自于 go1.21 release note 里面轻飘飘的一句话

Package initialization order is now specified more precisely

有机会下篇再说。