Go項目簡單接入travis ci
上一篇文章提到了 npm 的接入 travis 實現自動發佈 npm 包的方法,本文主要講述 Go 項目的使用,主要分爲執行單元測試和 build 打包發步到 github release。具體 travis 的基本操作參考 上文 即可,本文只講述不同的部分
單元測試
本文不講述 Go 的單元測試如何編寫,這裏直接以 filenamify (一個合法化文件路徑的庫)爲例子。已爲 filenamify.go
編寫測試文件 filenamify_test.go
。只需要在 tracis
中執行 go test -v
即可。
# https://github.com/flytam/filenamify/blob/master/.travis.yml language: go go: - 1.13.x env: - GO111MODULE=on script: go test -v 複製代碼
然後給在項目中加上構建狀態圖標。搞定
這樣,每次推送到遠程,就會觸發CI自動執行單元測試
發佈 github release
有時候我們的 Go 項目是需要打包成可行文件直接發佈到 github release 讓別人下載執行的。這時候也可以使用 travis
實現,藉助 travis releases
工具即可
1、新建一個 .travis.yml
文件,填入基本的 Go 配置環境
language: go go: - 1.13.x env: - GO111MODULE=on # 啓用Go mod install: - go get -v 複製代碼
2、編寫 Makefile
在 nodejs
項目中,我們一般會配置一個 npm run test
的命令執行測試,但是 Go 是沒有 npm
和 package.json
這兩個東西,這時候就需要編寫 Makefile
來實現了(可以把 Makefile
看作功能類型於 package.json
的東西,只是使用 make xxx
來執行), Makefile
編寫可以 參考 。
以 blog-sync 爲例子,這裏我是需要打包全平臺的可行文件,於是 Makefile
如下
GOCMD=go GOBUILD=$(GOCMD) build BINARY_NAME=bin NAME=blog-sync #mac build: CGO_ENABLED=0 $(GOBUILD) -o $(BINARY_NAME)/$(NAME)-mac # linux build-linux: CGO_ENABLED=0 GOOS=windows GOARCH=amd64 $(GOBUILD) -o $(BINARY_NAME)/$(NAME)-linux # windows build-win: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GOBUILD) -o $(BINARY_NAME)/$(NAME)-win.exe # 全平臺 build-all: make build make build-win make build-linux 複製代碼
執行 make build-all
即可在 bin
目錄下生成 3 個平臺的可執行文件。
language: go go: - 1.13.x env: - GO111MODULE=on # 啓用Go mod install: - go get -v before_deploy: make build-all deploy: provider: releases api_key: 自動生成的github key file_glob: true file: bin/* skip_cleanup: true on: repo: flytam/blog-sync tags: true 複製代碼
3、使用 setup
初始化配置
# 已經安裝travis cli travis setup releases # 按需填寫,輸入github賬號密碼,加密key,發佈文件等 複製代碼
再簡單定製化後,最終如下配置, releases
配置可參考 文檔
# https://github.com/flytam/blog-sync/blob/master/.travis.yml language: go go: - 1.13.x env: - GO111MODULE=on # 啓用Go mod install: - go get -v before_deploy: make build-all # 發佈前執行生成二進制文件的命令 deploy: provider: releases api_key: secure: xxxx # 使用glob匹配發布bin目錄下的文件 file_glob: true file: bin/* skip_cleanup: true on: repo: flytam/blog-sync # tag才觸發發佈 tags: true 複製代碼
4、發佈
每次打tag推送到倉庫,就會觸發自動發佈可執行文件到github release
git tag 1.0.0 git push --tags 複製代碼
5、可以看到,我們的自動構建發佈 release 成功了