构建 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 帐户 并创建个人访问令牌。

Screenshot of GitHub personal token

确保为其授予 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 的构建配置格式的更多信息。

示例 #