news 2026/9/19 21:52:10

minikube 二进制发布指南:从打 tag 到全平台产物上线的完整流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
minikube 二进制发布指南:从打 tag 到全平台产物上线的完整流程

minikube 二进制发布指南:从打 tag 到全平台产物上线的完整流程

【免费下载链接】minikubeRun Kubernetes locally项目地址: https://gitcode.com/gh_mirrors/mi/minikube

minikube 的版本发布(Release)是一项高度流程化的工程操作:从更新 Kubernetes 版本、构建 ISO 与 kicbase 镜像,到生成发布说明、打 git tag、经 Jenkins 构建上传全平台二进制,再到合并 releases.json、验证校验和并通知下游包管理器。本文以官方发布文档 binaries.md 为主体骨架,结合仓库内 Makefile、hack/tag_release.sh、hack/jenkins/release_build_and_upload.sh 与 release_sanity_test.go 等源码,逐阶段还原一次完整发布的执行细节。读完本文,你将掌握 minikube 版本发布各阶段的具体操作、参数来源与验证手段,可以直接对照仓库复现整个发布链路。

发布流程总览

一次标准发布按以下顺序推进,每一阶段都有明确的前置条件与交付物:

  1. 准备:在 Slack#minikube频道公告发布意向,暂停合并请求;
  2. 升级依赖:更新默认 Kubernetes 版本并合入 PR;
  3. 构建 ISO:非补丁版本必须构建新 ISO;
  4. 发布 kicbase 镜像:通过 Jenkinskic-release任务完成;
  5. 生成发布说明:写入 CHANGELOG.md;
  6. 更新 Makefile 版本号VERSION_MAJOR/VERSION_MINOR/VERSION_BUILD
  7. 打 tag:执行hack/tag_release.sh
  8. 构建并上传二进制:Jenkins Release 任务发布到 GCS 与 GitHub;
  9. 检查日志并合并 releases.json
  10. 验证校验和、更新文档与公告

其中 beta 版本在完成第 9 步的日志检查后即可视为发布完成,正式版本则需走完全部流程。

准备阶段:环境与仓库状态

发布前需要完成三件事:

  • #minikube频道公告发布意向,让社区周知;
  • 暂停合并请求,避免新增提交被意外遗漏在 ISO 或发布说明之外;
  • 本地同时检出两个 minikube 仓库副本:你的个人 fork(用于提交 PR)与上游仓库(upstream,用于执行发布相关命令)。

后续所有make类命令均应在上游仓库副本中执行,确保基于最新 master 状态操作。

更新 Kubernetes 版本

在本地上游仓库副本运行:

make update-kubernetes-version

该目标在 Makefile 中声明,底层实现位于hack/update/kubernetes_version/目录,负责探测最新稳定版 Kubernetes 并同步更新仓库内的默认版本常量与测试清单(目录下包含约 20 个版本相关 YAML 与一个 Go 程序,见 hack/update/kubernetes_version)。

运行后检查是否有文件被改动:若有,则先创建 PR 并合并,再继续后续发布步骤。默认 Kubernetes 版本常量定义在 pkg/minikube/constants/constants.go 的DefaultKubernetesVersion,Makefile 也正是通过读取该常量来确定编译基准版本。

构建新 ISO

ISO 的发布策略取决于版本类型:

  • 所有非补丁(non-patch)版本必须构建新 ISO;
  • 补丁版本(vx.x.1+):仅当deploy/iso目录自上次发布以来发生过变更时才需要。

判断方法:在仓库根目录执行git log -- deploy/iso检查是否有新提交。详细的 ISO 发布步骤见同目录文档 iso.md:在 Jenkins 的 ISO 任务中填入与 minikube 二进制版本一致的ISO_VERSIONISO_BUCKETminikube/iso后构建,构建完成后会自动创建携带变更的 PR;本地可用hack/jenkins/build_iso.sh脚本先行验证。ISO 构建根目录为 deploy/iso/minikube-iso,内含基于 Buildroot 的完整镜像定义。

发布新的 kicbase 镜像

运行 Jenkins 中的kic-release任务。该任务会自动创建一个 PR,必须确认输入正确的版本与仓库信息并手动合并该 PR。kicbase 是驱动 Kind 类集群的容器基础镜像,其版本号定义在 pkg/drivers/kic/types.go 的Version字段,Makefile 通过读取该常量获得KIC_VERSION

值得注意的是,kic-release产出的 kicbase 镜像会以 tarball 形式随发布二进制一并上传:在 release_build_and_upload.sh 中,脚本读取KIC_VERSION后按amd64arm64ppc64les390x四种架构执行docker pull/docker image save/openssl sha256,生成out/kicbase-<版本>-<架构>.tar及其.sha256校验文件。

更新发布说明(Release Notes)

在本地上游仓库副本执行:

make release-notes

该目标在 Makefile 中声明,实际调用 hack/release_notes.sh。脚本的工作机制如下:

  • gh auth获取 GitHub token(存入临时文件并在退出时清理),导出为GITHUB_TOKEN供 hack/changelog/changelog.go 使用;
  • 自动安装github.com/google/pullsheet,统计上个 tag 以来的 PR 与评审数据;
  • 通过git describe --abbrev=0定位最近一次 tag,驱动 changelog 生成与贡献者名单。

将脚本输出粘贴到 CHANGELOG.md 后,需要按对终端用户的重要程度排序;若变更超过 8 条,拆分为ImprovementsBug fixes两部分。同时执行以下清理:

  • changelog 只保留面向用户的变更,剔除纯文档、低风险重构、仅测试相关的 PR;
  • 从贡献者名单中移除机器人账号;
  • 合并名单中重复/相似的名字。

该 PR 可以随时合并,也可以与后续的Makefile更新 PR 合并提交。

更新 Makefile 版本号

修改 Makefile 顶部的三个版本变量:

VERSION_MAJOR ?= 1 VERSION_MINOR ?= 39 VERSION_BUILD ?= 0

它们组合出RAW_VERSION=$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_BUILD),并进一步导出VERSION ?= v$(RAW_VERSION)(见 Makefile)。该版本号同时被 Windows 安装器生成流程使用:out/minikube-installer.exe构建时会将三者替换进 NSIS 模板(见 Makefile)。

⚠️警告:只有所有非实验性集成测试全部通过后,才允许合并该 PR!

打 tag:hack/tag_release.sh

版本号合并后,执行:

sh hack/tag_release.sh 1.<minor>.<patch>

脚本 hack/tag_release.sh 的完整逻辑为:

  1. 校验参数个数,用法为tag_release.sh <major>.<minor>.<build>
  2. 用正则^[0-9]+\.[0-9]+\.[0-9a-z\.\-]+$校验版本格式,不匹配即退出;
  3. 在临时目录浅克隆上游仓库,checkout mastergit pull到最新;
  4. 创建带注释的 tag:git tag -a "v${version}" -m "$version Release"
  5. git push origin推送该 tag。

该脚本刻意在全新克隆中打 tag,以保证 tag 基于干净的上游 master,而不是本地未推送的提交。

构建并发布二进制

此阶段利用刚推送的 git tag,将新二进制发布到 GCS 并创建 GitHub Release。操作步骤:

  1. 打开 minikube 的 "Release" Jenkins 任务并登录;
  2. 点击左侧 "▶️ Build with Parameters";
  3. VERSION_MAJORVERSION_MINORVERSION_BUILD填与 Makefile 一致的值;
  4. 获取两个 ISO 校验和并填入参数:
    gsutil cat gs://minikube/iso/minikube-v<version>-amd64.iso.sha256 gsutil cat gs://minikube/iso/minikube-v<version>-arm64.iso.sha256
  5. 点击Build

背后的执行脚本是 hack/jenkins/release_build_and_upload.sh,它完成了以下关键工作:

  • 参数自检:从VERSION_MAJOR/VERSION_MINOR/VERSION_BUILD拼出版本,并用grep校验其与 Makefile 中的声明一致(见脚本第 28-38 行),防止 tag 与 Makefile 版本漂移;
  • 环境准备:调用check_install_golang.shcheck_install_docker.sh,并通过make verify-iso确认 ISO 已存在;
  • 多平台构建BUILD_IN_DOCKER=y make -j 16并行构建 Linux/Darwin 的 amd64 与 arm64 二进制、tar.gz压缩包、Windows 安装器(minikube-installer.exe)、以及 deb(amd64/arm64/ppc64el/s390x)与 rpm(x86_64/aarch64/ppc64le/s390x)等全平台产物;
  • dirty 校验:运行minikube version检查commit:行是否带-dirty后缀,若工作区有未提交改动则中止发布(脚本第 74-88 行);
  • latest 别名:复制minikube_latest_amd64.deb等无版本号产物,避免每次发布都要更新上游 Kubernetes 文档;
  • 上传 GCSgsutil -m cp out/* "gs://$BUCKET/releases/$TAGNAME/",随后将 beta/alpha 之外的正式版本内容复制到gs://$BUCKET/releases/latest/(脚本第 126-140 行)。

检查发布日志

任务结束后,点击 "Console Output" 确认发布过程无报错。brew 自动化失败通常在这一步暴露,因此日志检查是必经环节。

注意:如果你发布的是 beta 版本,到这里就算完成了。后续步骤仅适用于正式(stable)版本。

合并 releases.json 变更

发布脚本会更新https://storage.googleapis.com/minikube/releases.json——该文件是 minikube 二进制进行版本更新检查的数据源,且发布后立即生效。minikube-bot 随后会发出一个将 releases.json 变更合入代码树的 PR,请及时合并,以保持 GCS 与 GitHub 仓库数据同步。

仓库内对应产物包括 deploy/minikube/releases.json、deploy/minikube/releases-beta.json 与 deploy/minikube/releases-v2.json,更新检查逻辑位于 pkg/minikube/notify。

下游包管理器:AUR 与 Homebrew Cask

发布完成后,还需要跟进两个由社区维护的下游包:

包管理器维护位置发布后动作
Arch Linux AURminikube-bin点击 "Flag as package out-of-date" 标记过期,触发维护者更新
Brew CaskHomebrew/homebrew-cask 仓库的 Casks 目录发布任务会自动创建更新版本号与 SHA256 的 PR,需人工确认 PR 确实被创建

⚠️警告:Brew cask 自动化容易出错,务必确认 PR 已经创建

验证发布校验和

运行:

make check-release

该目标在 Makefile 中实现,执行go test -v ./deploy/minikube/release_sanity_test.go -run '//<版本>$$'。测试逻辑见 release_sanity_test.go:

  • TestReleases会分别从 stable 与 beta 两个 releases JSON 拉取全部版本(对应notify.GithubMinikubeReleasesURL等常量),逐一验证二进制可下载且校验和正确
  • validateChecksums校验 releases JSON 中 v1 扁平字段与 v2 嵌套 amd64 字段的一致性;
  • releaseBinaries将 v1/v2 两种格式归一化,覆盖 darwin/linux/windows × amd64/arm/arm64/ppc64le/s390x 的完整矩阵;
  • 若最终没有任何二进制被检查到,测试直接失败(no binaries were checked)。

由于 JSON 有 v1/v2 两种结构,make check-release实际验证的是发布产物与 releases.json 记录完全对齐,这是发布正确性的最后一道闸门。

更新文档与安全元数据

  • 文档:若本次发布涉及重大变更,请向 Kubernetes 官方 minikube 学习环境文档提交更新 PR;
  • 安全元数据:按 OPENSSF Security Insights 规范审阅并更新仓库根目录的 SECURITY-INSIGHTS.yml,使其准确反映仓库的构建、供应与安全实践现状。

公告新版本

最后在 README.md 中提及新版本,并通过以下渠道广而告之:

  • Slack#minikube频道;
  • minikube-dev、minikube-users 邮件列表;
  • Twitter(目前已由@minikube_dev账号自动化发布)。

小结:一次发布的完整清单

阶段关键命令 / 操作交付物
准备公告、暂停合并、准备 fork + upstream干净的发布起点
升级 K8smake update-kubernetes-version默认 Kubernetes 版本 PR
构建 ISOJenkins ISO 任务(ISO_VERSION/ISO_BUCKET=minikube/iso带 SHA256 的 ISO
kicbase 镜像Jenkinskic-release任务kicbase 镜像 PR
发布说明make release-notesCHANGELOG.md 更新
版本号编辑 Makefile版本 PR
打 tagsh hack/tag_release.sh 1.<minor>.<patch>上游 git tag
构建上传Jenkins Release 任务(含两个ISO_SHA256_*GCS 产物 + GitHub Release
日志检查Console Output确认 brew 等自动化成功
同步数据合并 minikube-bot 的 releases.json PRGCS 与 GitHub 一致
验证make check-release全平台校验和通过
收尾更新文档与 SECURITY-INSIGHTS.yml、公告社区同步

整个流程的核心原则是版本单一来源:Makefile 的VERSION_MAJOR/MINOR/BUILD是唯一事实源,tag_release.shrelease_build_and_upload.sh都通过正则或 grep 反查它,确保 tag、二进制、ISO、releases.json 与 GitHub Release 五者版本完全一致。

【免费下载链接】minikubeRun Kubernetes locally项目地址: https://gitcode.com/gh_mirrors/mi/minikube

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 21:51:30

老Mac升级无门?OCLP免费装最新系统完整指南

老Mac升级无门&#xff1f;OCLP免费装最新系统完整指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher "此 Mac 不受此版本 macOS 支持"——安装器…

作者头像 李华
网站建设 2026/9/19 21:49:17

AI智慧写作新时代:让论文创作事半功倍

在学术研究日益重要的今天&#xff0c;一篇高质量的论文往往是毕业、晋升、评职称的必经之路。然而&#xff0c;选题困难、文献浩如烟海、格式排版繁琐……这些痛点让无数学子和研究者望而却步。如今&#xff0c;一款集AI智能写作、查重降重、AIGC检测于一体的综合性学术平台—…

作者头像 李华
网站建设 2026/9/19 21:44:20

基于深度强化学习的无人机三维路径规划与Python实现

简介&#xff1a;面向具备Python与深度学习基础的研究者、工程师及高校学生&#xff0c;这份资源提供了一个基于深度强化学习的无人机三维路径规划项目实例&#xff0c;采用PPO算法与近端策略优化&#xff0c;覆盖三维环境建模、连续动作控制、障碍检测和混合式路线生成&#x…

作者头像 李华
网站建设 2026/9/19 21:43:41

Java户外用品销售网站设计与实现:从代码到论文答辩全攻略

简介&#xff1a;一份以‘足下平安户外用品销售网站的设计与实现’为主题的毕业设计论文doc文档&#xff0c;面向高校计算机、电子商务、软件技术等专业学生&#xff0c;可用于课程设计、毕业设计或论文写作参考。文档内容从绪论和需求分析出发&#xff0c;依次论述了系统架构设…

作者头像 李华