Manage CLI using Homebrew Formula
当团队工程中的脚本过多了以后,就应该考虑把它们组织起来,做成 CLI 了。比起一个个独立的脚本,CLI 更容易升级和维护,也更方便共享代码。
我的初衷就是把所有的脚本放到一个 gitlab 的 repo 中,所有想使用这个工具的人通过很简单的方式就能安装、更新并使用它。
那么问题来了,如何把这些脚本,变成在团队内部,人人都可以安装/升级的 CLI 呢?
我的选择是 Homebrew Formula。
Homebrew Formula
因为团队内部编写了很多 ruby 脚本,所以选择 Homebrew 是一件很 nature 的事情。
本来我想把它做成一个 gem 发布出去,但是由于 private 的 gem 需要有自己的源,折腾起来太麻烦,所以就放弃了。
后来搜索到,Homebrew Formula 是支持 private repo 的,所以就打算走这条路试试看。
Formula Cookbook 是官方提供的一些信息,但文档几乎没有人看,我就简单介绍一下这些东西到底是怎么回事。
比如我要写一个叫 foo 的命令行工具,用户可以在终端执行
foo hello
来输出 hello world!
。那我大概需要做哪些事情呢?1. 创建两个仓库(或者只创建一个仓库)
一个仓库用来放置 formula(类似于 CocoaPods/Specs),一个仓库用来放代码源文件。当然,如果你为了省事,可以像我一样,只创建一个仓库。
我创建了一个,叫 homebrew-foo
2. 编写 CLI 的代码
这是我编写好的 foo,注意,需要给它加上执行权限。而且这里我依赖了一个叫
gli
的 gem。3. 创建 Formula 文件
formula
可以看作一个描述文件,用来描述这个软件的具体信息,类似于 https://github.com/CocoaPods/Specs 中的一个 Sepc我在 repo 根目录创建了一个 Formula 文件夹,在它里面添加了
foo.rb
这个 formula我这里写得比较复杂,因为我依赖了 gli 这个 gem,如果你不依赖任何 gem,就会简单很多
4. 安装
有了 formula,有了源代码,其实现在就可以 release 给大家用了。
安装步骤如下,
brew tap x140yu/core git@github.com:X140Yu/homebrew-foo.git
这条命令会把你 formula 所在的仓库 clone 到
/usr/local/Homebrew/Library/Taps/x140yu/homebre-core
里面。为你的 foo 建立搜索范围。brew install foo
homebrew 会在上面那个目录里找到你的 formula,就可以安装了。
如果你像我一样进行了上面的操作,那你的 CLI 就已经安装成功并可以运行了,
5. 更新
软件发布了新版本支持了新功能怎么办?
- 更新代码
- 升级
Formula/foo.rb
中的 tag 像这样
- 把代码 push 到远程仓库
- 打上与刚才一致的 tag
在安装的机器上执行
brew update && brew reinstall foo
就可以更新到你修改的最新版本了6. 卸载
示例代码仓库在这里 https://github.com/X140Yu/homebrew-foo 在某些关键的地方添加注释,希望你能看得明白
怎么样,不是很麻烦吧,如果遇到什么问题,欢迎留言~