上一篇文章提到了npm的接入 travis 實現自動發佈 npm 包的方法,本文主要講述 Go 項目的使用,主要分爲執行單元測試和 build 打包發步到 github release。具體 travis 的基本操做參考上文便可,本文只講述不一樣的部分node
本文不講述 Go 的單元測試如何編寫,這裏直接以filenamify(一個合法化文件路徑的庫)爲例子。已爲filenamify.go
編寫測試文件filenamify_test.go
。只須要在tracis
中執行go test -v
便可。linux
# https://github.com/flytam/filenamify/blob/master/.travis.yml
language: go
go:
- 1.13.x
env:
- GO111MODULE=on
script: go test -v
複製代碼
而後給在項目中加上構建狀態圖標。搞定 git
這樣,每次推送到遠程,就會觸發CI自動執行單元測試有時候咱們的 Go 項目是須要打包成可行文件直接發佈到 github release 讓別人下載執行的。這時候也可使用travis
實現,藉助travis releases
工具便可github
一、新建一個.travis.yml
文件,填入基本的 Go 配置環境npm
language: go
go:
- 1.13.x
env:
- GO111MODULE=on # 啓用Go mod
install:
- go get -v
複製代碼
二、編寫Makefile
json
在nodejs
項目中,咱們通常會配置一個npm run test
的命令執行測試,可是 Go 是沒有npm
和package.json
這兩個東西,這時候就須要編寫Makefile
來實現了(能夠把Makefile
看做功能類型於package.json
的東西,只是使用make xxx
來執行),Makefile
編寫能夠參考。windows
以blog-sync爲例子,這裏我是須要打包全平臺的可行文件,因而Makefile
以下api
GOCMD=go
GOBUILD=$(GOCMD) build
BINARY_NAME=bin
NAME=blog-sync
#mac
build:
CGO_ENABLED=0 $(GOBUILD) -o $(BINARY_NAME)/$(NAME)-mac
# windows
build-linux:
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 $(GOBUILD) -o $(BINARY_NAME)/$(NAME)-linux
# linux
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 個平臺的可執行文件。bash
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
複製代碼
三、使用setup
初始化配置ide
# 已經安裝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
複製代碼
四、發佈
每次打tag推送到倉庫,就會觸發自動發佈可執行文件到github release
git tag 1.0.0
git push --tags
複製代碼
五、能夠看到,咱們的自動構建發佈 release 成功了