19

Go项目简单接入travis ci

 4 years ago
source link: https://studygolang.com/articles/27390
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

上一篇文章提到了 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
复制代码

然后给在项目中加上构建状态图标。搞定

YzmeAvu.png!webMjuQfae.png!web

这样,每次推送到远程,就会触发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 成功了

aaMFz2b.png!web

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK