GoReleaser 跨平台发布自动化
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/goreleaser-cross-platform-release-automation 技能。
技能介绍
手动发布有什么问题
给 Go 项目做一次正式发布,从来不是一个 go build 就能解决的事。你需要为 Linux、macOS、Windows 分别打出二进制,为每个目标平台写构建脚本,手动维护版本号,再逐条整理 commit 记录生成更新日志。如果还要发布 Docker 镜像,还得再写一套 Dockerfile 和构建参数模板。最麻烦的是发布环节:把产物上传到 GitHub Releases、GitLab 或 Gitea,每一步都依赖人工操作,任何一个平台忘了传、版本号写错,后续排查都要花不少时间。
GoReleaser 的价值在于把这些重复劳动收敛成一个声明式的配置加一条命令。你在 .goreleaser.yaml 里描述清楚要构建什么、怎么构建、发布到哪里,剩下的由它统一调度。
这个技能做什么
- 跨平台构建:根据配置为多个
GOOS/GOARCH组合编译二进制,并按项目约定处理文件名与压缩格式。 - 容器镜像:基于模板生成 Docker 镜像并推送到指定仓库,镜像内容跟随版本号和构建信息变化。
- 更新日志:从 commit 历史中提取变更,按约定格式生成 changelog。
- 多平台发布:把产物上传到 GitHub、GitLab 或 Gitea 的 Releases 区域,支持快照版本与正式版本两种通道。
- 项目适配:适用于 Go 项目,也能服务其他编译型语言的发布流程,前提是产物组织方式与配置对齐。
适用边界与注意点
- 配置优先。所有行为都来自
.goreleaser.yaml,迁移旧项目时需要先梳理现有发布脚本,把参数映射成配置项。 - 发布动作依赖目标平台的凭据和权限,凭证管理仍需你自己负责,技能不会替你保管。
- 快照版本和正式版本的区分、产物校验策略等细节,需要在配置中明确,而不是默认就有。
- 对于已有复杂 CI 流水线的项目,建议先在小分支上试跑一次完整流程,确认产物与现有发布记录一致后再合并。
使用场景
- 为 Go 服务准备 v1.2.0 正式版,需要同时产出 Linux、macOS、Windows 三份二进制并统一版本命名
- 发版前要从最近两周的 commit 生成 changelog,并同时发布到 GitHub、GitLab、Gitea 三个平台
- 每次发版都要向镜像仓库推送容器镜像,镜像 tag 必须与版本号严格对应
- CI 流水线里不想维护多段手写构建脚本,改用一个配置文件加一条命令完成全流程
适合人员
- Go 后端工程师,同时负责多个微服务的发版,想减少跨平台产物的手工操作
- 开源项目维护者,需要发布 release 并附带镜像,但团队里没有专职 CI 工程师
- DevOps 工程师,打算把现有多套发布脚本收敛成一份可复用的配置文件
- 从其他编译型语言转到 Go 的开发者,需要一套可直接套用的发布流程模板