
Travis CI 在 Go 项目中会自动执行 go get -t -v ./...,若项目无需此步骤或存在依赖冲突,将导致构建失败;通过添加空 Makefile 可跳过该默认行为,实现稳定构建。
travis ci 在 go 项目中会自动执行 `go get -t -v ./...`,若项目无需此步骤或存在依赖冲突,将导致构建失败;通过添加空 makefile 可跳过该默认行为,实现稳定构建。
Travis CI 对 Go 语言项目内置了一套默认构建流程:当未显式定义 install 或 script 步骤,且项目中不存在 Makefile 时,它会自动运行 go get -t -v ./... 来拉取并测试当前包及其依赖。这一行为虽便于快速启动,但常引发问题——例如在仅需预装工具(如 Hugo)、不依赖 go get 获取本项目代码的场景下,该命令不仅冗余,还可能因 GOPATH 冲突、模块启用状态不一致或网络超时而失败(如错误提示 “The command eval go get -t -v ./... failed”)。
根本解决方案:禁用 Travis 的默认 go get 行为
最简洁可靠的方式是向项目根目录添加一个空 Makefile,使 Travis 认为项目已自定义构建逻辑,从而跳过默认的 go get 步骤:
# Makefile
install:
@echo "Skipping default go get — using custom setup"或更轻量的空目标(兼容 GNU Make):
# Makefile .PHONY: install install:
✅ 关键点:只要存在
Makefile且包含install目标(即使为空),Travis 就不会执行默认go get,而是运行make install(此处无实际操作,快速成功)。随后你的before_script(如- go get -u -v github.com/spf13/hugo)将按预期执行。
同时,请确保 .travis.yml 中明确声明 Go 版本与语言环境,避免隐式版本歧义:
language: go go: - "1.19" # 推荐指定具体版本,而非 latest install: - go get -u -v github.com/spf13/hugo script: - hugo version # 验证工具安装成功
⚠️ 注意事项:
- 若项目已启用 Go Modules(
go.mod存在),go get ./...在 GOPATH 模式下可能报错;此时空Makefile是比修改GOPATH更安全的规避方案; - 不建议通过
before_install覆盖默认命令,因其仍可能触发前置失败;Makefile方式符合 Travis 官方推荐的“显式覆盖默认行为”原则; - 构建日志中若仍出现
go get相关输出,请检查是否误删了Makefile或其未提交至仓库(git add Makefile && git commit)。
通过这一小步配置,即可彻底摆脱 Travis 自动 go get 带来的不确定性,让构建过程更可控、更可复现。

















