
从 Shell 脚本到 Go 应用:使用 Kiro AI 助手完成 Harpoon 项目重构的完整实践
本文将详细记录我如何使用 Kiro AI 助手,将一个 Shell 脚本重构为功能完整的 Go 应用程序的全过程。适合想要了解 AI 辅助开发流程的开发者阅读。
文章目录
- [从 Shell 脚本到 Go 应用:使用 Kiro AI 助手完成 Harpoon 项目重构的完整实践](#从 Shell 脚本到 Go 应用:使用 Kiro AI 助手完成 Harpoon 项目重构的完整实践)
-
- [📖 背景介绍](#📖 背景介绍)
-
- 项目起源
- [为什么选择 Kiro ?](#为什么选择 Kiro ?)
- [如何下载 kiro ?](#如何下载 kiro ?)
- [🎯 开发流程详解](#🎯 开发流程详解)
-
- 第一阶段:需求分析与规格制定
-
- [1.1 创建项目规格](#1.1 创建项目规格)
- [1.2 需求迭代优化](#1.2 需求迭代优化)
- 第二阶段:架构设计
-
- [2.1 系统架构设计](#2.1 系统架构设计)
- [2.2 接口设计](#2.2 接口设计)
- 第三阶段:任务分解与实现
-
- [3.1 任务列表生成](#3.1 任务列表生成)
- [3.2 逐步实现](#3.2 逐步实现)
- 第四阶段:核心功能实现
-
- [4.1 命令行接口设计](#4.1 命令行接口设计)
- [4.2 配置管理系统](#4.2 配置管理系统)
- [4.3 多运行时支持](#4.3 多运行时支持)
- 第五阶段:问题解决与优化
-
- [5.1 构建问题解决](#5.1 构建问题解决)
- [5.2 跨平台构建](#5.2 跨平台构建)
- 第六阶段:文档与发布准备
-
- [6.1 文档系统](#6.1 文档系统)
- [6.2 发布自动化](#6.2 发布自动化)
- [🚀 开发成果](#🚀 开发成果)
- [💡 Kiro 使用心得](#💡 Kiro 使用心得)
- [🎯 项目成果展示](#🎯 项目成果展示)
- [🔮 未来展望](#🔮 未来展望)
- [📝 总结](#📝 总结)
- [🔗 相关链接](#🔗 相关链接)
📖 背景介绍
项目起源
在云原生和 Kubernetes 环境中,容器镜像管理是一个常见但繁琐的任务。我之前写了一个名为 images.sh
的 Shell 脚本来批量处理多镜像的拉取、保存、加载和推送操作。虽然功能完整,但存在以下问题:
- 跨平台兼容性差:只能在 Unix-like 系统上运行
- 错误处理简陋:缺乏详细的错误信息和恢复机制
- 配置管理困难:所有配置都硬编码在脚本中
- 扩展性有限:添加新功能需要大量修改
- 用户体验不佳:缺乏进度显示和友好的帮助信息
因此,我决定将其重构为一个现代化的 Go 应用程序,并将其命名为 Harpoon(寓意精准定位容器镜像管理的挑战)。
为什么选择 Kiro ?
在这个重构过程中,我选择了 Kiro AI 助手作为我的开发伙伴,原因如下:
- 专业的软件开发能力:Kiro 具备深厚的编程知识和最佳实践经验
- 结构化的开发流程:支持从需求分析到设计实现的完整开发周期
- 代码质量保证:能够生成符合工业标准的代码
- 实时协作:可以即时响应需求变更和问题解决
如何下载 kiro ?
这个产品 目前暂停了向所有用户开放注册或使用,你当前 不能立即下载或使用 Kiro,只能申请加入他们的候补名单,等待官方邀请你使用。
第三方下载地址 :https://www.techspot.com/downloads/7778-kiro.html
🎯 开发流程详解
下载安装好kiro后,下载自己在github创建的项目。
选择AI 辅助模式。这里选择适合编程开发的Spec模式。
第一阶段:需求分析与规格制定
1.1 创建项目规格
首先,我使用 Kiro 的 Spec 功能来系统化地分析需求:
bash
# 在 Kiro 中创建新的规格
.kiro/specs/harpoon-go-rewrite/
├── requirements.md # 需求文档
├── design.md # 设计文档
└── tasks.md # 任务列表
与 Kiro 的对话示例:
我:这是我的项目harpoon,它目前的主要功能是用shell脚本实现批量管理容器镜像的脚本。我想将一个 Shell 脚本重构为 Go 应用,这个脚本用于管理容器镜像的拉取、保存、加载和推送操作。
Kiro:我来帮你创建一个完整的规格文档。首先让我分析你的需求并生成初始的需求文档...
Kiro 自动生成了详细的需求文档,包括:
- 用户故事:以 "As a DevOps engineer, I want..." 的格式描述需求
- 验收标准:使用 EARS 格式(Easy Approach to Requirements Syntax)
- 技术约束:跨平台支持、性能要求等
1.2 需求迭代优化
通过与 Kiro 的多轮对话,我们不断完善需求:
markdown
#### Acceptance Criteria
1. 当用户运行"hpn --version"时,系统应显示当前版本信息。
2. 当用户运行"hpn --help"时,系统应显示全面的使用信息。
3. 不能执行编译?
4. 等等各类报错,AI辅助解决。
这种结构化的需求描述确保了项目目标的清晰性和可测试性。
第二阶段:架构设计
2.1 系统架构设计
Kiro 帮我设计了一个模块化的架构:
bash
cmd/hpn/ # CLI 应用入口
internal/ # 内部包
├── config/ # 配置管理
├── runtime/ # 容器运行时实现
├── service/ # 业务逻辑服务
└── logger/ # 日志系统
pkg/ # 公共包
├── types/ # 数据结构和类型
└── errors/ # 自定义错误类型
2.2 接口设计
Kiro 设计了清晰的接口定义:
go
type ContainerRuntime interface {
Name() string
IsAvailable() bool
Pull(ctx context.Context, image string, options PullOptions) error
Save(ctx context.Context, image string, tarPath string) error
Load(ctx context.Context, tarPath string) error
Push(ctx context.Context, image string, options PushOptions) error
}
这种接口设计使得系统可以轻松支持 Docker、Podman 和 Nerdctl 等不同的容器运行时。
第三阶段:任务分解与实现
3.1 任务列表生成
Kiro 将整个项目分解为 13 个主要任务,每个任务又包含多个子任务:
markdown
- [ ] 1. Set up project structure and core interfaces
- [ ] 2. Implement configuration management system
- [ ] 3. Implement logging system
- [ ] 4. Implement container runtime detection and interfaces
- [ ] 5. Implement core image data models and utilities
...
- [ ] 13. Add comprehensive testing and validation
3.2 逐步实现
任务执行示例:
我:开始执行任务 1.1 - 创建项目结构
Kiro:我来为你创建 Go 项目的基础结构...
Kiro 自动生成了完整的项目结构,包括:
go
// go.mod
module github.com/harpoon/hpn
go 1.21
require (
github.com/spf13/cobra v1.8.0
github.com/spf13/viper v1.18.2
)
go
// pkg/types/config.go
type Config struct {
Registry string `yaml:"registry" json:"registry"`
Project string `yaml:"project" json:"project"`
Proxy ProxyConfig `yaml:"proxy" json:"proxy"`
Runtime RuntimeConfig `yaml:"runtime" json:"runtime"`
// ...
}
第四阶段:核心功能实现
4.1 命令行接口设计
一个关键的挑战是保持与原始 Shell 脚本的兼容性。Kiro 帮我实现了完全兼容的命令行接口:
go
// 原始 Shell 脚本命令
./images.sh -a pull -f images.txt --save-mode 2
// Go 版本命令(完全兼容)
hpn -a pull -f images.txt --save-mode 2
4.2 配置管理系统
Kiro 实现了一个强大的配置管理系统:
yaml
# ~/.hpn/config.yaml
registry: registry.k8s.local
project: library
proxy:
http: http://proxy.company.com:8080
https: http://proxy.company.com:8080
enabled: true
runtime:
preferred: docker
timeout: 5m
配置优先级:命令行参数 > 环境变量 > 配置文件 > 默认值
4.3 多运行时支持
Kiro 设计了一个优雅的运行时检测和适配系统:
go
func detectContainerRuntime() (string, error) {
// 按优先级检测:Docker -> Podman -> Nerdctl
if _, err := exec.LookPath("docker"); err == nil {
if err := exec.Command("docker", "version").Run(); err == nil {
return "docker", nil
}
}
// ... 其他运行时检测
}
第五阶段:问题解决与优化
5.1 构建问题解决
在开发过程中遇到了构建问题:
我 :执行
go build -o hpn cmd/hpn/main.go
报错 "undefined: rootCmd"
Kiro :这是因为你只构建了单个文件,而rootCmd
定义在同包的其他文件中。正确的构建方式是:
bashgo build -o hpn ./cmd/hpn
我: 关于当前的版本写到是1.2 我想统一改为v1.0
Kiro 不仅解决了问题,还更新了所有相关文档中的构建命令。
5.2 跨平台构建
Kiro 帮我创建了完整的跨平台构建系统:
bash
# Makefile
GOOS=linux GOARCH=amd64 go build -o hpn-linux-amd64 ./cmd/hpn
GOOS=linux GOARCH=arm64 go build -o hpn-linux-arm64 ./cmd/hpn
GOOS=darwin GOARCH=amd64 go build -o hpn-darwin-amd64 ./cmd/hpn
GOOS=darwin GOARCH=arm64 go build -o hpn-darwin-arm64 ./cmd/hpn
GOOS=windows GOARCH=amd64 go build -o hpn-windows-amd64.exe ./cmd/hpn
第六阶段:文档与发布准备
6.1 文档系统
提问:我现在准备发布v1.0到github,并且别人可以下载v1.0的二进制包,我需要做哪些准备和工作
Kiro 帮我创建了完整的文档系统:
docs/
├── README.md # 英文文档
├── README_CN.md # 中文文档
└── Scripts_EN.md # 原始脚本文档
6.2 发布自动化
Kiro 创建了完整的发布流程:
bash
# release.sh - 自动构建所有平台的二进制文件
# pre-release-check.sh - 发布前检查
# install.sh - 用户安装脚本
# GitHub Actions 工作流 - 自动化发布
🚀 开发成果

功能对比
功能 | Shell 脚本 | Go 版本 (hpn) |
---|---|---|
性能 | ⭐⭐ | ⭐⭐⭐⭐⭐ |
错误处理 | ⭐⭐ | ⭐⭐⭐⭐⭐ |
跨平台支持 | ⭐⭐ | ⭐⭐⭐⭐⭐ |
配置管理 | ⭐⭐ | ⭐⭐⭐⭐⭐ |
用户体验 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
技术亮点
- 完全向后兼容:保持与原始脚本相同的命令行接口
- 多运行时支持:自动检测并适配 Docker、Podman、Nerdctl
- 配置管理:支持 YAML 配置文件和环境变量
- 跨平台:支持 Linux、macOS、Windows 多个平台和架构
- 错误处理:提供详细的错误信息和解决建议
- 并行处理:支持并发操作以提高性能
代码质量
- 测试覆盖率:完整的单元测试和集成测试
- 代码结构:清晰的模块化设计
- 文档完整性:英文和中文双语文档
- 发布流程:自动化的构建和发布流程
💡 Kiro 使用心得
优势体验
- 结构化开发:Kiro 的 Spec 功能帮助我系统化地分析需求和设计架构
- 代码质量:生成的代码符合 Go 最佳实践,包含完整的错误处理
- 问题解决:遇到技术问题时,Kiro 能快速定位并提供解决方案
- 文档生成:自动生成高质量的技术文档和用户手册
- 持续优化:在开发过程中不断优化设计和实现
最佳实践
- 明确需求:在开始编码前,花时间与 Kiro 讨论和完善需求
- 逐步实现:按照任务列表逐步实现,避免一次性处理过多功能
- 及时反馈:遇到问题及时与 Kiro 沟通,获得针对性的解决方案
- 文档同步:在开发过程中同步更新文档,确保信息一致性
- 测试验证:每个功能实现后及时测试验证
注意事项
- 需求表达:尽量详细和准确地描述需求,避免歧义
- 代码审查:虽然 Kiro 生成的代码质量很高,但仍需要人工审查
- 业务逻辑:复杂的业务逻辑需要人工参与设计和验证
- 性能优化:特定的性能优化可能需要结合实际场景调整
🎯 项目成果展示
安装使用
bash
# 快速安装
curl -fsSL https://raw.githubusercontent.com/ghostwritten/harpoon/main/install.sh | bash
# 基本使用
hpn -a pull -f images.txt
hpn -a save -f images.txt --save-mode 2
hpn -a push -f images.txt -r registry.example.com -p myproject --push-mode 2
项目统计
- 开发时间:约 2 周(兼职开发)
- 代码行数:约 2000 行 Go 代码
- 支持平台:5 个平台/架构组合
- 功能特性:20+ 个主要功能
- 文档页面:10+ 个文档文件
🔮 未来展望
基于这次成功的合作经验,我计划在未来的项目中继续使用 Kiro:
- 功能扩展:添加镜像签名验证、OCI 格式支持等高级功能
- 性能优化:基于用户反馈进行性能调优
- 生态集成:与 Kubernetes、Helm 等工具集成
- 社区建设:开源项目的社区运营和维护
📝 总结
通过这次与 Kiro 的合作开发,我深刻体会到了 AI 辅助开发的强大威力:
对个人开发者的价值
- 提升效率:大幅减少了重复性的编码工作
- 保证质量:生成的代码符合工业标准和最佳实践
- 学习机会:在合作过程中学习到了很多新的技术和方法
- 降低门槛:即使是复杂的系统设计也变得可以掌控
对项目成功的贡献
- 系统性思考:Spec 驱动的开发流程确保了项目的完整性
- 技术深度:实现了很多原本需要大量时间研究的技术细节
- 用户体验:生成了完整的文档和用户友好的安装脚本
- 可维护性:清晰的代码结构和完整的测试覆盖
给其他开发者的建议
- 拥抱 AI 工具:AI 不是要替代开发者,而是要增强开发者的能力
- 保持学习心态:在与 AI 合作的过程中持续学习新技术
- 注重沟通:清晰地表达需求和问题,获得更好的协作效果
- 验证和测试:AI 生成的代码仍需要人工验证和测试
🔗 相关链接
- 项目地址 :https://github.com/ghostwritten/harpoon
- 发布页面 :https://github.com/ghostwritten/harpoon/releases
- 文档中心 :项目 README
- Kiro IDE :https://kiro.ai
这篇文章记录了我使用 Kiro AI 助手完成 Harpoon 项目开发的完整过程。希望能为其他想要尝试 AI 辅助开发的朋友提供参考和启发。如果你有任何问题或想要交流经验,欢迎通过 GitHub 联系我!
标签:#AI辅助开发 #Go语言 #容器技术 #开源项目 #Kiro #云原生