新闻详情

新闻详情

首页 / 资讯中心 / 详情

OpenTelemetry Go 多模块发布流程全解:从语义约定生成到 tag、Release 与示例验证

发布时间:2026/9/20 22:33:29来源:尧图网络
OpenTelemetry Go 多模块发布流程全解:从语义约定生成到 tag、Release 与示例验证
云原生CLI应用安全【免费下载链接】slimSlim(toolkit): Dont change anything in your container image and minify it by up to 30x (and for compiled languages even more) making it secure too! (free and open source)项目地址https://gitcode.com/gh_mirrors/slim/slim点击查看免费下载导读本文以 OpenTelemetry Gogo.opentelemetry.io/otel官方发布流程文档 RELEASING.md 为主体完整梳理其从语义约定Semantic Conventions生成、破坏性变更校验、预发布、打标签、创建 Release到发布后示例验证与生态联动的全链路操作。文章同时结合当前仓库中该依赖的源码佐证Makefile、versions.yaml、verify_examples.sh帮助读者真正理解这套多模块 Go 仓库的发布工程实践并可直接复用到类似结构的项目中。为什么 OpenTelemetry Go 需要一套多模块发布流程OpenTelemetry Go 仓库并不是单个 Go module而是一个由数十个 module 组成的多模块仓库multi-module repository核心 APIgo.opentelemetry.io/otel、SDK、trace/metric 包、各类 exporter、bridge 与 example 均各自拥有独立的go.mod。这种结构让下游可以只依赖自己需要的子包但代价是发布时必须保证一组模块版本同步、tag 成体系、公共 API 不出现意外破坏。当前仓库slim将go.opentelemetry.io/otel以 vendor 方式纳入依赖版本为 v1.19.0可见于 go.mod。而在 vendor 目录下的 versions.yaml 中可以看到发布时以module-sets模块集为单位进行版本管理stable-v1稳定版模块集含go.opentelemetry.io/otel、trace、metric、sdk、各 exporter 与 example 等版本v1.19.0experimental-metrics实验性 metrics 模块集bridge/opencensus、otlpmetric、prometheus exporter 等版本v0.42.0experimental-schemaschema 模块集版本v0.0.7excluded-modules不参与发布的模块如internal/tools。由此可以看出发布流程的核心对象不是一个仓库而是一个模块集MODSET。RELEASING.md 描述的所有步骤本质上都是围绕这一机制展开的。第一步语义约定Semantic Conventions生成OpenTelemetry 语义约定span、resource、event 的属性和命名规范由独立的 [OpenTelemetry Semantic Conventions] 仓库维护。每当上游语义约定发布新版本本仓库就需要重新生成semconv子包。RELEASING.md 给出的标准流程是将语义约定仓库 checkout 到目标 release tag拉取最新的代码生成器镜像docker pull otel/semconvgen:latest在本仓库执行make semconv-generate ...目标。官方示例生成 v1.21.0 对应的语义约定包export TAGv1.21.0 # Change to the release version you are generating. export OTEL_SEMCONV_REPO/absolute/path/to/opentelemetry/semantic-conventions docker pull otel/semconvgen:latest make semconv-generate # Uses the exported TAG and OTEL_SEMCONV_REPO.该命令会在semconv下新建一个以 TAG 命名的子包例如 semconv 目录下对应版本的子包生成内容需检查无误后再提交 PR。从 Makefile 的实现可以看到semconv-generate依赖两个环境变量缺一不可TAG语义约定的版本号OTEL_SEMCONV_REPO语义约定仓库在本地的绝对路径。底层实际调用semconvgen工具分别针对--onlyspan、--onlyattribute_group、--onlyevent、--onlyresource四种 conventionType从语义约定仓库的model/.目录读取 YAML 模型经template.j2模板生成trace.go、attribute_group.go、event.go、resource.go最后用semconvkit将产物输出到semconv/TAG子包。第二步破坏性变更校验make gorelease在版本发布前必须确认本轮改动没有在公共 API 上引入非预期的破坏性变更。官方使用 Go 官方的 gorelease 工具执行make gorelease从 Makefile 可以看到gorelease目标会遍历OTEL_GO_MOD_DIRS中列出的所有 module 目录逐个在该目录下运行gorelease通过对比上一个 tag 的公共 API 与当前代码来报告破坏性差异。若发现问题应在发布前修复或明确该破坏是有意为之并同步到 Changelog。第三步预发布Pre-Release预发布阶段要解决两件事决定哪些模块集要发布以及让所有子模块的go.mod依赖新版本。1. 在 versions.yaml 中更新模块集版本首先决定本次发布的模块集并更新它们在 versions.yaml 中的version字段提交到新分支。2. 执行make prereleasemake prerelease MODSETmodule set该命令会创建一个名为prerelease_module set_new tag的分支包含全部发布相关改动。从 Makefile 的实现看prerelease目标要求必须显式设置MODSET环境变量否则直接报错退出其内部先执行multimod verify校验模块集配置再执行multimod prerelease -m MODSET批量改写版本号。3. 校验改动并合并git diff ...prerelease_module set_new tagdiff 应当显示所有模块的版本都变成了new tag。确认无误后合并git merge prerelease_module set_new tag4. 更新 Changelog这是发布质量的关键一环官方要求用git --no-pager log --prettyoneline last tag..HEAD检视自上个 tag 以来的全部提交确保所有相关改动都已收录将Unreleased内容移动到新章节标题遵循[new tag] - date of release格式同步更新文末所有相关链接。当前 vendor 仓库的 CHANGELOG.md 正是这一规范的实证例如顶部章节## [1.19.0/0.42.0/0.0.7] 2023-09-28——由于一个发布周期内通常包含多个模块集Changelog 标题会用斜杠并列各模块集的版本号stable-v1 / experimental-metrics / experimental-schema保持与 versions.yaml 的版本一一对应。5. 推送并提交 PR将改动推送到上游并创建 Pull RequestPR 描述中必须附带经过整理curated的 Changelog 内容便于评审者快速把握本次发布范围。第四步打标签TagPR 合并后即可对合并提交打 tag。RELEASING.md 用两个IMPORTANT强调了此步的严肃性必须使用与预发布阶段完全相同的 tag否则仓库会处于损坏状态只要在预发布与打标签之间不改动versions.yaml就不会出问题Go module 的 tag 一旦发布就无法删除Go 模块代理会缓存已发布的版本打错 tag 的后果难以收拾。因此推送前务必反复确认版本号正确。对每个要发布的模块集执行make add-tags MODSETmodule set COMMITcommit hashCOMMIT是合并后的 PR 在主分支上的 commit hash只有当当前工作目录的HEAD不是正确提交时才需要显式提供。从 Makefile 可见COMMIT默认值为HEADadd-tags同样要求设置MODSET内部先multimod verify再multimod tag -m MODSET -c COMMIT。由于是多模块仓库推送 tag 时必须连同所有子模块 tag 一起推送git push upstream new tag git push upstream submodules-path/new tag ...第五步创建 GitHub Releasetag 推送完成后在 GitHub 上为new tag创建 ReleaseRelease 正文应包含本次发布对应的全部 Changelog 发布说明release notes。这一步是下游用户通过go get拉取新版本的正式入口也与 Go 模块代理对版本的可见性直接相关。第六步发布后验证示例verify_examples.sh发布完成后最重要的验证是确认 examples 在仓库之外仍能正常构建——因为仓库内的go.mod可能通过replace指令指向本地副本掩盖了依赖问题。官方提供一键脚本./verify_examples.sh结合 verify_examples.sh 的实现可以看清它做了哪些事前置检查工作区必须干净git diff --quiet且 HEAD 必须指向已打 tag 的提交否则直接失败退出将./example目录整体复制到${GOPATH}/src/oteltmp/遍历所有含go.mod的 example 目录用go mod edit重写 module 名改为oteltmp/dir并借助gojq解析出所有replace声明后逐一-dropreplace删除最后go mod tidy重新解析依赖通过 get_main_pkgs.sh 找出包含main包的目录逐个go build .。这样一来examples 实际使用的是刚发布到模块代理的真实版本而非仓库内的本地副本从而确保发布产物开箱可用。第七步发布后的生态联动发布本身不是终点。RELEASING.md 明确列出三项后续动作Contrib 仓库为使用本次版本的opentelemetry-go-contrib仓库创建对应 Release网站文档更新 OpenTelemetry 官网 Go 插桩文档重点是把引用的各包版本号提升到刚发布的版本并确认所有代码示例仍可编译、内容准确Demo 仓库升级opentelemetry-demo中accountingservice、checkoutservice、productcatalogservice等 Go 服务的依赖版本。这一步体现的是 OpenTelemetry 生态的版本联动核心仓库的每个 Release 都会向下游文档、示例和 demo 传播任何一环滞后都可能导致文档与代码不一致。关键要点速览阶段核心命令/变量作用与注意事项语义约定生成make semconv-generate需TAG、OTEL_SEMCONV_REPO依据上游语义约定生成semconv/TAG子包破坏性变更校验make gorelease遍历所有 module 检查公共 API 兼容性预发布make prerelease MODSET...创建prerelease_modset_new tag分支并同步版本Changelog手工整理标题格式[new tag] - date多模块集用/并列版本打标签make add-tags MODSET... COMMIT...tag 必须与预发布一致且 Go module tag 无法删除创建 ReleaseGitHub Release正文附上 Changelog 发布说明示例验证./verify_examples.sh副本中剔除 replace 后按真实发布版本构建发布后contrib / 官网文档 / demo升级版本号并保证示例可编译总结OpenTelemetry Go 的发布流程本质上是一套面向多模块 Go 仓库的工程化解决方案用versions.yamlmodule-sets统一定义版本矩阵用multimod驱动prerelease与add-tags批量操作用gorelease守护公共 API 兼容性再用verify_examples.sh兜底验证发布产物。这套流程的每一步都对应着明确的 Make target 与可复现的命令任何维护多模块 Go 项目的团队都可以直接借鉴其设计思路。对 slim 这类以 vendor 方式引入 OpenTelemetry Go 的项目而言理解这套发布机制也有助于在升级otel依赖时准确判断版本组合与 changelog 的对应关系参考 go.mod 与 CHANGELOG.md 的版本对照。赞分享云原生CLI应用安全【免费下载链接】slimSlim(toolkit): Dont change anything in your container image and minify it by up to 30x (and for compiled languages even more) making it secure too! (free and open source)项目地址https://gitcode.com/gh_mirrors/slim/slim点击查看免费下载相关推荐Grafana Tempo 仓库内嵌的 OpenTelemetry Go 官方发布流程全解读从语义约定升级到多模块打 tagGrafana Tempo 仓库内嵌的 OpenTelemetry Go 官方发布流程全解读从语义约定升级到多模块打 tag 本仓库Grafana Temp后端可观测性链路追踪OpenTelemetry Go 发版全流程解析从 semconv 生成到 Tag 签名与 Post-ReleaseOpenTelemetry Go 发版全流程解析从 semconv 生成到 Tag 签名与 Post Release OpenTelemetry Go go构建工具云原生后端OpenTelemetry Go 多模块发布全流程指南从 Semantic Convention 升级到 GPG 签名 ReleaseOpenTelemetry Go 多模块发布全流程指南从 Semantic Convention 升级到 GPG 签名 Release 导读 OpenTele后端微服务存储认证鉴权上一篇Linera Wasm运行时安全高效的智能合约执行环境下一篇生产环境部署使用Hugging Face Inference Endpoints部署DeBERTa-v3-base-zeroshot-v2.0创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Ant Design Vue ConfigProvider 全局配置指南:provide/inject 架构、完整 API 与实战避坑 2026/9/20 23:06:34

Ant Design Vue ConfigProvider 全局配置指南:provide/inject 架构、完整 API 与实战避坑

Ant Design Vue ConfigProvider 全局配置指南:provide/inject 架构、完整 API 与实战避坑 【免费下载链接】ant-design-vue 🌈 An enterprise-class UI components based on Ant Design and Vue. 🐜 项目地址: https://gitcode.com/gh_mirr…

阅读更多 →
OpenResearch 实战:构建可复现的科研工作流与实验管理 2026/9/20 23:06:34

OpenResearch 实战:构建可复现的科研工作流与实验管理

1. 为什么我要认真聊聊 OpenResearch 这件事第一次看到“OpenResearch”这个词,很多人会下意识把它理解成“开放研究”四个字的直译,觉得无非就是论文开放获取、数据共享那一套。但真正在科研协作、数据工程、AI 实验管理这些圈子里摸爬滚打过几年之后&a…

阅读更多 →
Apollo Client GraphQLWsLink 完整指南:基于 graphql-ws 在 WebSocket 上执行订阅操作 2026/9/20 23:06:34

Apollo Client GraphQLWsLink 完整指南:基于 graphql-ws 在 WebSocket 上执行订阅操作

Apollo Client GraphQLWsLink 完整指南:基于 graphql-ws 在 WebSocket 上执行订阅操作 【免费下载链接】apollo-client The industry-leading GraphQL client for TypeScript, JavaScript, React, Vue, Angular, and more. Apollo Client delivers powerful caching…

阅读更多 →
Docker(四) Docker介绍 2026/9/20 23:06:34

Docker(四) Docker介绍

Docker 是什么 Docker 本质其实是 LXC 的增强版. 它本身不是容器, 并不实现虚拟化, 虚拟化仍然是利用 linux 内核的容器技术(namespace cgroup) 实现. Docker 是容器的易用工具, 它把容器的创建, 启动, 停止, 分发 变得更加简单. Docker 在早期的版本其核心就是 LXC 的二次封装…

阅读更多 →
四大AI Agent横向对比:从OpenClaw到Codex CLI 2026/9/20 23:06:34

四大AI Agent横向对比:从OpenClaw到Codex CLI

不知道你们发现没有,最近身边聊 AI Agent 的人突然变多了。尤其是在 AI 编程这个方向上,从 OpenClaw、Hermes Agent 这种偏“个人助手”的框架,到 Claude Code、Codex CLI 这种直接扎进终端的编程 Agent,几乎每周都有新版本、新玩…

阅读更多 →
PyPTO 非对齐存储接口 vf.store_unalign 全解析:变长向量与掩码数据的高效 Tile 搬出 2026/9/20 23:03:34

PyPTO 非对齐存储接口 vf.store_unalign 全解析:变长向量与掩码数据的高效 Tile 搬出

PyPTO 非对齐存储接口 vf.store_unalign 全解析:变长向量与掩码数据的高效 Tile 搬出 【免费下载链接】pypto PyPTO(发音: pai p-t-o):Parallel Tensor/Tile Operation编程范式。 项目地址: https://gitcode.com/cann/pypto …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞