构建 Go 项目
本指南涵盖的内容 #
有关语言版本和其他构建环境特定信息,请访问我们的参考页面
本指南的其余部分介绍了在 Travis CI 中配置 Go 项目。如果您不熟悉 Travis CI,请先阅读我们的 教程 和 构建配置 指南。
指定要使用的 Go 版本 #
您可以使用 Go 的任何标记版本,一个版本中使用 x
代替次要或修补程序级别以使用给定主要或次要版本的最新版本,或者使用 master
从源代码获取最新版本。所有 go 版本管理都由 gimme 处理。
language: go
go:
- 1.x
- "1.10"
- 1.11.x
- master
Go 模块 #
通过 .travis.yml
或存储库设置为 GO111MODULE
设置的任何值都会保留。如果不存在,则默认值为 GO111MODULE=auto
。
Go 导入路径 #
项目源代码将放置在 GOPATH/src/{repo-source}
中,但如果需要 虚荣导入(特别是对于 internal
包导入),则可以在配置的顶层指定 go_import_path:
,例如
go_import_path: example.org/pkg/foo
依赖项管理 #
travis_install_go_dependencies <go-version> [gobuild-args]
的默认 install
步骤的行为将根据指定的 Go 版本以及某些环境变量和文件路径的存在而有所不同。
如果以下任何名称的 Makefile 存在,则在 install
步骤中不会执行任何进一步的操作
GNUMakefile
Makefile
BSDmakefile
makefile
在所有其他情况下,将运行命令 go get ${gobuild_args} ./...
。
godep 支持 #
在使用 vendored 依赖项时,包含对 godep 的支持,以便 GOPATH
将以 ${TRAVIS_BUILD_DIR}/Godeps/_workspace
为前缀,而 PATH
将以 ${TRAVIS_BUILD_DIR}/Godeps/_workspace/bin
为前缀。此外,如果 Godeps/_workspace/src
目录不存在,则将安装 godep
并运行 godep restore
。
重要的是要注意,不支持在顶层使用旧样式的 Godeps.json
。
所有 godep
集成步骤都在上面列出的单独 go get
和 makefile 步骤之前执行。
请注意,如果未指定自定义 install
步骤,则仅会激活 godep
支持。
安装私有依赖项 #
由于 go get
使用 HTTPS 从 GitHub 克隆依赖项而不是 SSH,因此它需要与我们 处理私有依赖项的推荐方法 不同的解决方法。
通过 HTTPS 克隆时,git 在后台使用 curl,这反过来又允许您指定 .netrc 文件,您可以在其中存储特定域的自定义身份验证凭据,例如 github.com。
转到您的 GitHub 帐户 并创建个人访问令牌。
确保为其授予 repo
范围,这允许访问私有存储库。
为了减少令牌的访问权限,您还可以创建一个单独的用户帐户,该帐户仅对特定项目所需的存储库具有访问权限。
复制令牌并将其存储在存储库中的 .netrc 中,数据如下
machine github.com
login <username>
password <token>
将此添加到您的存储库并向您的 .travis.yml 添加以下步骤
before_install:
- cp .netrc ~/.netrc
- chmod 600 ~/.netrc
默认构建脚本 #
Go 项目假设默认情况下使用 Make 或 Go 构建工具。如果存储库根目录中存在 Makefile,则 Travis CI 将用于运行项目测试套件的默认命令为
make
如果不存在 Makefile,则将使用
go test ${gobuild_args} ./...
代替。
这些默认命令可以根据 通用构建配置 指南中的描述进行覆盖。例如,要添加 -v
标志,请在 .travis.yml
中覆盖 script:
键,如下所示
script: go test -v ./...
传递给默认 go test
命令的参数可以通过在配置的顶层指定 gobuild_args:
来覆盖,例如
gobuild_args: -x -ldflags "-X main.VersionString v1.2.3"
这将导致脚本步骤为
go test -x -ldflags "-X main.VersionString v1.2.3" ./...
要通过运行 Scons 而不带参数来构建,请使用以下命令
script: scons
环境变量 #
作业正在使用的 Go 版本可用作
TRAVIS_GO_VERSION
这可能包含 .x
,如上所述。在部署条件中使用此变量时,应考虑这种可能性。例如
go:
- 1.7.x
⋮
deploy:
...
on:
condition: $TRAVIS_GO_VERSION =~ ^1\.7
构建配置参考 #
您可以在我们的 Travis CI 构建配置参考 中找到有关 Go 的构建配置格式的更多信息。