Go項目接入travis

上一篇文章提到了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 是沒有npmpackage.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 成功了

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章