Go项目Travis CI配置文件必须命名为.travis.yml并置于仓库根目录,仅支持UTF-8无BOM编码与空格缩进;需显式设go版本、GO111MODULE=on;race测试易超时应加-short或拆分job;发布需加密GitHub Token、tags:true及正确glob路径。

Travis CI 配置文件写在哪、叫什么名
Go 项目必须在仓库根目录放一个 .travis.yml,名字不能错(大小写敏感),也不能放在子目录里。Travis 不会自动识别 travis.yml 或 .travis.yaml —— 只认 .travis.yml。
常见错误是本地测试时用 travis lint 报 “file not found”,其实只是文件名拼错了,或者加了空格、隐藏字符。
- 文件必须是 UTF-8 编码,无 BOM
- YAML 缩进必须用空格,不能用 Tab(否则解析失败,报
while scanning for the next token) - Go 项目建议显式指定
language: go,即使 Travis 能猜,但不保险
go version 和 GOPATH 在 Travis 中怎么设
Travis 默认的 Go 版本往往偏旧(比如 1.13),而现代 Go 项目多用模块(Go modules),需要 1.11+ 且需关掉 GOPATH 模式。但 Travis 的 go: 字段只控制 GOROOT,不自动清理 GOPATH 环境。
所以得手动关:在 before_script 里加 export GO111MODULE=on,并确保没意外触发 GOPATH 构建逻辑。
立即学习“go语言免费学习笔记(深入)”;
- 推荐写法:
go: "1.21"(指定明确小版本,避免自动升到 1.22 导致 test 失败) - 如果项目还在用
vendor/,要加go mod vendor到install:步骤,否则go build会忽略 vendor - 别信 Travis 文档里说的 “自动启用 modules”——它真不一定启,
GO111MODULE=on必须显式写
go test -race 为什么在 Travis 上总超时
Go 的竞态检测器(-race)会让测试变慢 2–5 倍,Travis 默认单核虚拟机资源有限,加上网络波动或依赖拉取慢,很容易触发 10 分钟超时(The job exceeded the maximum log length, or the log was truncated)。
这不是代码问题,是环境限制。要么调宽超时,要么精简测试范围。
- 用
go test -race -short ./...跳过耗时长的集成测试 - 把
-timeout 30s加进 test 命令,防止单个测试卡死 - 如果必须全量跑 race,改用
jobs:+strategy: matrix拆成多个 job 并行,每个只测一个子包
构建产物怎么传到 GitHub Releases
Travis 本身不直接支持发布二进制,得靠 deploy: 插件 + GitHub Token。但容易漏三件事:Token 权限、tag 触发条件、文件 glob 匹配失败。
最常踩的坑是:build 成功了,但 deploy 步骤根本没执行——因为没打 tag,或 tag 不符合 tags: true 规则。
- Token 必须带
public_repo权限(私有库用repo),且用travis encrypt加密后填进deploy.api_key.secure -
deploy.on.tags: true是硬性开关,没这个,push 到 master 也不会触发 release -
deploy.file支持 glob,但 Travis 的 shell 不是 bash,写dist/*.tar.gz比dist/**/*.tar.gz更稳










