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

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

必備工具

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

操做步驟

首先固然是完成項目的編碼工做。程序可以正常的編譯執行。以ts項目爲例。github

$: 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 腳本安裝

該項目很是簡單,代碼也不多。以上目錄展現了兩個關鍵目錄文件, 分別是:ruby

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

這兩處變動均是經過工具生成的。如今咱們生成它:bash

$: rm -rf dist install.sh

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

# 生成發佈目錄
$: goreleaser init 
# 直接操做會自動發佈到 github 對應的 repo 上,前提是須要 tag 
$: goreleaser 
複製代碼

經過goreleaser操做,會自動將發佈目錄發佈到github.com/liujianping…發佈頁中。 固然前提是在系統環境變量中設置好 GITLAB_API_PRIVATE_TOKEN 環境變量,具體值請在 github 上進行申請。運維

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

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

Brew 安裝

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

首先,在項目的github.com/liujianping…發佈頁中找到MacOS的安裝包地址:github.com/liujianping….post

建立一個 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 時間戳轉換與對比工具
相關文章
相關標籤/搜索