尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Uncloud CLI `uc version` 命令完全指南:查看版本与构建信息

Uncloud CLI `uc version` 命令完全指南:查看版本与构建信息 Uncloud CLIuc version命令完全指南查看版本与构建信息【免费下载链接】uncloudA lightweight tool for deploying and managing containerised applications across a network of Docker hosts. Bridging the gap between Docker and Kubernetes ✨项目地址: https://gitcode.com/GitHub_Trending/unc/unclouduc version是 Uncloud CLI 提供的一个零依赖子命令用于输出当前uc二进制文件的版本号与构建元数据Git 提交、构建日期、Go 版本、目标平台等。本文以官方 CLI 参考文档为主体结合仓库源码讲解该命令的三种输出模式人类可读、JSON、Go 模板与全局继承参数帮助你在排查故障、上报 issue 或编写自动化脚本时准确读取版本信息。命令概览与使用场景在 Uncloud 中uc是管理集群资源机器、服务、卷等的总入口参见 uc 命令参考uc version则是其中最轻量、最不依赖集群连接的子命令——它只读取二进制自身的构建信息不发起任何网络请求因此在任何环境下都能可靠执行。典型使用场景确认当前安装的 CLI 版本判断是否与uncloudd服务端版本匹配向社区或 issue 报告问题时附上完整的构建信息版本、Git commit、构建日期等在 CI/CD 或运维脚本中以-o json或 Go 模板提取版本号做版本比对与流程分支。命令语法uc version [flags]version子命令不接受位置参数源码中通过Args: cobra.NoArgs声明见 cmd/uc/version.go。输出选项-o, --output--output简写-o是uc version的核心参数支持三种取值取值说明默认空不传人类可读的 tab 对齐文本默认json输出 JSON 格式的完整构建信息—任意 Go 模板字符串按模板渲染字段如{{.Version}}—官方提示当你不确定模板可用哪些字段时先执行uc version -o json查看 JSON 输出字段名即模板可直接引用的属性名。人类可读输出默认不传-o时命令输出 ASCII 艺术字仓库 cmd/uc/art.txt 中嵌入的 uc logo、项目介绍与一行说明以及 tab 对齐的键值信息块大致形如_ _ ___ | | | |/ __| | |_| | (__ \__,_|\___| uc: Uncloud CLI tool for deploying apps and managing resources (https://uncloud.run) Version: 0.19.0 Git commit: abc1234 Git state: clean Build date: 2026-01-01T00:00:00Z Built by: goreleaser Go version: go1.24.1 Platform: linux/amd64这些字段由 internal/version/version.go 中的Info结构体定义并通过tabwriter对齐输出。humanVersion函数cmd/uc/version.go负责组装 ASCII 艺术与信息块。JSON 输出-o json使用encoding/json的MarshalIndent缩进两个空格输出结构化信息便于脚本解析$ uc version -o json { Version: 0.19.0, GitCommit: abc1234, GitState: clean, BuildDate: 2026-01-01T00:00:00Z, BuiltBy: goreleaser, GoVersion: go1.24.1, Platform: linux/amd64 }字段与含义对应关系如下JSON 字段含义Version语义化版本号未注入时默认为999.0.0-devGitCommit构建时的 Git 提交哈希GitState工作区状态clean或dirtyBuildDate构建时间RFC3339BuiltBy构建工具标识发布版通常为goreleaserGoVersion编译所用 Go 工具链版本Platform目标操作系统/架构如linux/amd64、darwin/arm64Go 模板输出-o传入任意 Go 模板字符串时命令用text/template渲染Info结构体实现见 cmd/uc/version.go 的templateVersion函数。常用示例# 只输出版本号 $ uc version -o {{.Version}} 0.19.0 # 组合多个字段 $ uc version -o uc {{.Version}} ({{.GitCommit}}, {{.Platform}}) uc 0.19.0 (abc1234, linux/amd64)注意模板支持 Gotext/template的全部能力管道、条件、循环等但如果模板解析或执行失败命令会返回错误并退出例如字段名拼写错误时。构建信息的底层来源ldflags 注入与默认值uc version展示的数据并非运行时探测所得而是在编译期通过-ldflags注入到包级变量中的见 .goreleaser.yaml 的builds.uc.ldflags-X github.com/psviderski/uncloud/internal/version.version{{.Version}} -X github.com/psviderski/uncloud/internal/version.commit{{.Commit}} -X github.com/psviderski/uncloud/internal/version.dirty{{.IsGitDirty}} -X github.com/psviderski/uncloud/internal/version.date{{.CommitDate}} -X github.com/psviderski/uncloud/internal/version.builtBygoreleaser这些值由 GoReleaser 在发布流程中替换同时internal/version/version.go 的GetInfo()还会借助github.com/caarlos0/go-version读取runtime/debug.BuildInfomodule 版本、Go 版本、平台等作为补充。注入值优先于运行时探测值例如GitCommit只有在 ldflags 注入了commit变量时才使用注入值。两个值得注意的细节开发版默认版本号若未通过 ldflags 注入如本地go buildVersion显示为999.0.0-dev以此明确标识非发布构建见String()函数Git 状态语义dirty变量接收的是 GoReleaser 的{{.IsGitDirty}}布尔字符串true映射为dirtyfalse映射为clean。由于version命令在 cmd/uc/main.go 中注册为根命令的子命令且不经过集群连接初始化逻辑它可以在未配置任何集群的情况下运行。继承自父命令的全局参数uc version会继承uc根命令的持久化标志定义于 cmd/uc/main.go 的PersistentFlags。这些参数对version命令的实际输出没有影响但了解它们有助于理解命令行整体行为--connect string Connect to a remote cluster machine without using the Uncloud configuration file. [$UNCLOUD_CONNECT] Format: [ssh://]userhost[:port], sshgo://userhost[:port], tcp://host:port, or unix:///path/to/uncloud.sock -c, --context string Name of the cluster context to use (default is the current context). [$UNCLOUD_CONTEXT] --uncloud-config string Path to the Uncloud configuration file. [$UNCLOUD_CONFIG] (default ~/.config/uncloud/config.yaml)三个参数均支持对应的环境变量覆盖UNCLOUD_CONNECT、UNCLOUD_CONTEXT、UNCLOUD_CONFIG环境变量的绑定逻辑在根命令的PersistentPreRunE中通过cli.BindEnvToFlag完成。需要说明的是--connect支持多种远程连接协议[ssh://]userhost[:port]系统 ssh、sshgo://userhost[:port]内置 Go SSH 客户端、tcp://host:port、unix:///path/to/uncloud.sock--uncloud-config默认指向~/.config/uncloud/config.yaml路径中的~会在初始化时由fs.ExpandHomeDir展开当未指定--connect且配置文件不存在时CLI 会自动回退到默认的 unix socket 路径machine.DefaultUncloudSockPath。与其他 CLI 工具的版本输出对比Uncloud 服务端守护进程uncloudd同样提供了版本输出能力二者共用internal/version包与同一套 ldflags 注入变量见 .goreleaser.yaml 中builds.uncloudd.ldflags与 cmd/uncloudd/version.go因此在排查客户端与服务端版本不匹配问题时可以用相同字段对齐比对两边输出。小结uc version零依赖、无需集群连接即可运行是排查环境与上报 issue 的第一手工具-o json提供结构化输出适合脚本解析Go 模板适合按需提取单个字段版本信息的准确性依赖编译期 ldflags 注入未注入时以999.0.0-dev标识开发构建命令完整实现可参考 cmd/uc/version.go 与 internal/version/version.go。【免费下载链接】uncloudA lightweight tool for deploying and managing containerised applications across a network of Docker hosts. Bridging the gap between Docker and Kubernetes ✨项目地址: https://gitcode.com/GitHub_Trending/unc/uncloud创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表