如何在 Linux & MacOS 上優雅的發佈 Go 程序

這兩天又寫了一個開源小工具,時間戳轉換與對比工具:ts,主要是在公司運維時使用。程序寫完了發現安裝過程不夠自動化,特別是對於個人使用 MacOS 系統,日常運維是 Linux 操作系統。雖然 Go 語言支持跨平臺編譯,但是拿着個二進制程序拷貝來拷貝去,總歸不像樣。本文記錄一下如何優雅在 Linux & MacOS 上發佈 Go 程序的過程。

必備工具

在實操之前,請首先確認成功安裝以下工具:

操作步驟

首先當然是完成項目的編碼工作。程序能夠正常的編譯執行。以ts項目爲例。

$: git clone https://github.com/liujianping/ts
$: cd
$: ├── LICENSE
├── README.md
├── cmd
│   ├── main.go
│   ├── main_test.go
│   └── root.go
├── **dist**
│   ├── CHANGELOG.md
│   ├── checksums.txt
│   ├── config.yaml
│   ├── darwin_386
│   │   └── ts
│   ├── darwin_amd64
│   │   └── ts
│   ├── linux_386
│   │   └── ts
│   ├── linux_amd64
│   │   └── ts
│   ├── ts_0.0.6_Darwin_i386.tar.gz
│   ├── ts_0.0.6_Darwin_x86_64.tar.gz
│   ├── ts_0.0.6_Linux_i386.tar.gz
│   └── ts_0.0.6_Linux_x86_64.tar.gz
├── go.mod
├── go.sum
├── **install.sh**
├── main.go
...

Shell 腳本安裝

該項目非常簡單,代碼也很少。以上目錄展示了兩個關鍵目錄文件, 分別是:

  • dist 目錄
  • install.sh 安裝腳本

這兩處變更均是通過工具生成的。現在我們生成它:

$: rm -rf dist install.sh

# 生成安裝腳本
$: godownloader --repo=liujianping/ts > ./install.sh

# 生成發佈目錄
$: goreleaser init 
# 直接操作會自動發佈到 github 對應的 repo 上,前提是需要 tag  
$: goreleaser 

通過goreleaser操作,會自動將發佈目錄發佈到https://github.com/liujianping/ts/releases發佈頁中。 當然前提是在系統環境變量中設置好 GITLAB_API_PRIVATE_TOKEN 環境變量,具體值請在 github 上進行申請。

其實以上過程完成後,就可以實現跨平臺安裝了。install.sh 腳本可以直接執行,通過判斷本地系統版本相應的去下載安裝包,自動進行安裝。

$: curl -sfL https://raw.githubusercontent.com/liujianping/ts/master/install.sh | sh -s -- -b $(go env GOPATH)/bin

Brew 安裝

以上講的是通過 SHELL 腳本的方式安裝。對於MacOS系統而言,程序還可以打包進入brew包管理服務中,通過brew install的方式進行安裝。

首先,在項目的https://github.com/liujianping/ts/releases發佈頁中找到MacOS的安裝包地址:https://github.com/liujianping/ts/releases/download/v0.0.6/ts_0.0.6_Darwin_x86_64.tar.gz.

創建一個 brew formula:

$: brew create https://github.com/liujianping/ts/releases/download/v0.0.6/ts_0.0.6_Darwin_x86_64.tar.gz

通過這個命令,brew會創建文件:/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/ts.rb.進行簡單的修改,僅提供安裝腳本:

# Documentation: https://docs.brew.sh/Formula-Cookbook
#                https://rubydoc.brew.sh/Formula
# PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST!
class Ts < Formula
  desc "timestamp convert & compare tool"
  homepage ""
  url "https://github.com/liujianping/ts/releases/download/v0.0.6/ts_0.0.6_Darwin_x86_64.tar.gz"
  sha256 "cf28627f973b03c2c103032f9c2be35d1d2f556fdf79f5139cc659b5e07924dd"
  # depends_on "cmake" => :build

  def install
    bin.install "ts"
  end
end

保存修改。現在在個人電腦上就可以進行brew install ts安裝了。但這還沒完成發佈。在個人 github 賬號下創建一個homebrew-前綴的repo.如liujianping/homebrew-tap.將新創建文件: /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/ts.rb 發佈到該 repo 下。現在就可以通過 brew的方式安裝應用了。

$: brew tap liujianping/tap && brew install ts

小結

很多好的開源項目都有完善的安裝指南,通過學習這些開源項目,將好的經驗應用到自己的項目中,是一條捷徑。

如果覺得有用,歡迎點讚我的開源項目:

  • job 將短命令規劃成計劃Job
  • ts 時間戳轉換與對比工具
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章