哈喽大家好,我是专淘各种开源神器的 挖宝小周!
熟悉我的老粉都知道,我平时最大的爱好就是泡在 GitHub 的 Trending 榜和最新更新列表里「捡垃圾」——哦不对,是淘金!特别是碰到用 Golang 编写的那些小而美、单二进制文件直接跑的 CLI 工具,我整个人都会兴奋起来。
今天给大家分享一个上周被我挖到的效率宝藏工具,并带大家实战一把如何用它彻底改造我们日常繁琐的开发发布流程。
📦 挖宝档案:让 Shell 脚本彻底告别丑陋的 Gum
前阵子在逛 GitHub 时,我发现了一个 Star 走势极其丝滑的项目 —— 来自著名的 Charm 团队之手的 gum。
- 项目仓库:https://github.com/charmbracelet/gum
- Star 走势:目前已经突破了 17k Stars!看它的 Star 历史曲线,几乎是一路高歌猛进,社区活跃度非常高。
- 技术栈:纯 Go 语言打造(基于他们家自研的终端 UI 框架 Bubble Tea)。
很多兄弟日常写自动化运维、部署或者构建脚本时,最头疼的就是写交互逻辑:提示输入、选择分支、多选服务、Loading 动画…… 原生 Shell 写出来的界面不仅丑,代码还一堆 read -p 和正则校验,极其容易劝退。
而 gum 就是专门解决这个痛点的。它把各种高颜值的 TUI(终端界面)交互封装成了原子级的命令行指令,天然支持 Pipeline,开箱即用!
🛠️ 实战场景:打造零心智负担的「微服务多环境联调发布 CLI」
在团队日常协作中,经常需要本地编译、打镜像并推送到联调测试环境。平时大家手动敲参数经常输错环境变量或者分支名。
今天小周就带大家用 gum 加上一点点 Bash,搭一个超级酷炫、支持交互选择与 Loading 动画的部署工作流。
1. 环境准备 (Mac / Linux)
因为是用 Go 写的工具,跨平台非常轻巧,Mac 上直接一行搞定:
brew install gum
如果你是 Linux 服务器环境,直接去 Releases 页面下编译好的单个二进制文件放进 /usr/local/bin 就行,完全没有任何依赖,这就是 Go 的魅力!
2. 核心脚本实战:deploy.sh
直接上代码,我已经把复杂的逻辑全部简化并加上了中文注释:
#!/usr/bin/env bash
set -e
# 1. 打印一个骚气的高颜值 Banner
gum style \
--foreground 212 --border-foreground 212 --border double \
--align center --width 50 --margin "1 2" --padding "1 2" \
'🚀 挖宝小周微服务发布助手' 'Powered by Go & Gum'
# 2. 交互式选择目标环境 (单选)
echo "👉 请选择要部署的目标环境:"
ENV=$(gum choose "dev (开发环境)" "staging (预发环境)" "prod (生产严控)")
# 3. 如果是生产环境,必须加一层二次确认弹窗
if [[ "$ENV" == *"prod"* ]]; then
gum confirm "⚠️ 警告:正在向生产环境部署,你确定要继续吗?" || exit 1
fi
# 4. 模糊搜索并选择需要编译的微服务 (支持方向键与多选)
echo "👉 请选择要打包的 Go 服务模块 (空格多选,回车确认):"
SERVICES=$(gum choose --no-limit "user-service" "order-service" "payment-service" "gateway-service")
if [ -z "$SERVICES" ]; then
gum style --foreground 196 "❌ 未选择任何服务,流程终止!"
exit 0
fi
# 5. 输入本次发布的 Git Tag / Release 说明
echo "👉 请输入本次发布的变更说明:"
NOTE=$(gum write --placeholder "填写发布日志 (Ctrl+D 提交)...")
# 6. 带 Spin 动画的编译与构建过程模拟
for SVC in $SERVICES; do
gum spin --spinner dot --title "正在编译并打包服务 [ $SVC ] 中,请稍候..." -- sleep 3
# 实际项目中替换为:go build -o ./bin/$SVC ./cmd/$SVC
done
# 7. 完成提示
gum style \
--foreground 48 --border rounded --padding "0 2" \
"✅ 部署任务成功触发!" \
"环境: $ENV" \
"服务: $(echo $SERVICES | tr '\n' ' ')" \
"备注: $NOTE"
3. 运行效果体验
给脚本赋予执行权限并运行:
chmod +x deploy.sh
./deploy.sh
整个过程你完全不需要手打繁琐的参数,终端会出现平滑的高亮光标、带颜色的边框、多选框以及带动态 Loading 的转圈动画。
对于团队新人来说,直接执行该脚本,再也不用担心手抖把 test 环境的参数发到了 prod 集群!
💡 效率复盘:为什么这套方案能提效?
- 防呆设计(Poka-Yoke):利用
gum choose限制只能选择预设的环境枚举值,从工具层面杜绝拼写错误。 - 极简分发:整个脚本只依赖一个 Go 编译出的几兆大小的单二进制文件,不需要装 Python/Node.js 运行时环境,非常适合往 Dockerfile 或宿主机一塞就跑。
- 编写成本极低:原本为了实现终端漂亮的居中文本或表格,我们可能需要借助 Python 的
rich库写几十行,现在仅仅调用一条gum style就搞定了。
☕ 小周的开源唠叨
这个项目小周自己用下来,体验感真的直接拉满,我连自己的 Git 提交脚本都已经换成由 gum 驱动了。这就是开源最迷人的地方:用最高雅的方式,解决最枯燥的重复劳动。
大家平时在工作中有没有遇到哪些「命令行痛点」?或者你手上也有私藏的冷门 Golang 神仙项目?赶紧在评论区贴出来,小周下期就去复现挖掘!顺手给个点赞支持一下开源分享吧~ 👋
License: CC BY-NC 4.0
Updated 13 hours ago
Was this article helpful? Give it a like.
0 comments


