基本上我想要做的是将 git 标签名称(来自 github 版本)嵌入到我的 GO 代码中的版本字符串中。如果我使用此代码;package main import ( "flag" "fmt") var version string func main() { var verFlag bool flag.BoolVar(&verFlag, "version", false, "Returns the version number") var confPath string flag.StringVar(&confPath, "conf", "conf.yml", "Location on config file") flag.Parse() // if the user wants to see the version if verFlag { fmt.Printf("%s", version) return }}什么是在设置“版本”的最佳途径-ldflags '-X main.version VERSION',以$TRAVIS_TAG在特拉维斯-CI在构建过程中,此外,Travis CI 设置了您可以在构建中使用的环境变量,例如标记构建,或运行构建后部署。TRAVIS_TAG:如果是标签的当前构建,这包括标签的名称我最后的努力是使用这个 make 文件:GOFLAGS ?= $(GOFLAGS:)TAG := $(VERSION)ifeq ($(TAG),) BRANCH := $(shell git rev-parse --abbrev-ref HEAD) DT := $(shell date '+%F::%T') VSN := $(BRANCH)-$(DT)else VSN := $(TAG)endifENV := $(shell printenv)GOFLAGS = -ldflags '-X main.version $(VSN)'default: allall: test installinstall: get-deps @go build $(GOFLAGS) *.gotest: @go test $(GOFLAGS) ./...get-deps: @go get ./...clean: @go clean $(GOFLAGS) -i ./使用这个 travis 配置文件;language: goscript: make VERSION=$TRAVIS_TAGgo:- 1.4.1deploy: provider: releases api_key: secure: reallylongsecurestring file: releasebin skip_cleanup: true on: tags: true然而,无论我尝试什么变体,并且我已经尝试了许多不同风格的本质上这个例子,似乎最终在我的 github 版本中的二进制文件不包含标签名称。观察到的是在 make 文件中没有设置版本字符串时产生的分支和日期版本字符串。我已经在我的开发机器上尝试过这个 make 文件,并将环境变量设置为 Travis 中的预期值,它按预期工作。我也很清楚,我不希望这种情况发生在提交构建时,而只会发生在来自 github 的版本中,即创建标签时。
1 回答
MYYA
TA贡献1868条经验 获得超4个赞
所以我自己解决了这个问题。
我在上面的例子中的问题是在 Travis 文件中。我似乎需要在“脚本”参数周围加上引号。为了完整起见,这是我的新 Travis 文件;
language: go
script:
- "make VERSION=$TRAVIS_TAG"
go:
- 1.4.1
deploy:
provider: releases
api_key:
secure: reallylongsecurestring
file: releasebin
skip_cleanup: true
on:
tags: true
- 1 回答
- 0 关注
- 150 浏览
添加回答
举报
0/150
提交
取消