go - Gitlab CI - Auto DevOps 作业失败,无法为 Go 项目选择构建包?
问题描述
我的 Gitlab CI Auto DevOps 作业失败了
Status: Downloaded newer image for gliderlabs/herokuish:latest
-----> Unable to select a buildpack
ERROR: Job failed: exit code 1
我经历过
我仍然不确定我应该把 buildpack 放在哪里。
我的应该是heroku-buildpack-go
,我已经忘记了从哪里得到它。
我的 repo 只包含一个单字符README.md
和 "Hello, playground" main.go
。
结论:
感谢 David 的全面解释,我能够从正确的 buildpack 开始 DevOps:
由此我可以得出结论,您位于目录树根目录的单个 .go 文件不符合自动构建 Go 项目的激活标准。我建议在上述要求中选择一个依赖管理器并修改您的项目以支持它。
FTA,我刚刚做了touch go.mod
&git add
并且git push
AutoDevops 确实开始构建我的 GO 项目。
但是在我看来,Gitlab AutoDevops 无法非常轻松地构建任何 GO 项目,因为我收到以下错误(带有项目变量TRACE=true
):
...
!! The go.mod file for this project does not specify a Go version
!!
!! Defaulting to go1.11.1
!!
!! For more details see: https://devcenter.heroku.com/articles/go-apps-with-modules#build-configuration
!!
-----> Installing go1.11.1
-----> Fetching go1.11.1.linux-amd64.tar.gz... done
!! Installing package '.' (default)
!!
!! To install a different package spec add a comment in the following form to your `go.mod` file:
!! // +heroku install ./cmd/...
!!
!! For more details see: https://devcenter.heroku.com/articles/go-apps-with-modules#build-configuration
!!
-----> Running: go install -v -tags heroku .
go: cannot determine module path for source directory /tmp/build (outside GOPATH, no import comments)
ERROR: Job failed: exit code 1
更简单的解决方案是改用.gitlab-ci.yml
文件,记录在
https://blog.boatswain.io/post/build-go-project-with-gitlab-ci/
(并在Gitlab CI - Start Shared Runner for normal repos 跟进) .
解决方案
Auto Build 通过以下两种方式之一创建应用程序的构建:
- 如果有 Dockerfile,它会使用 docker build 来创建一个 Docker 镜像。
- 否则,它将使用Herokuish和Heroku buildpacks自动检测应用程序并将其构建到 Docker 映像中。
然后根据Heroku Go buildpack文档查看构建激活标准:
如果您使用以下任一方式,此 buildpack 会将您的存储库检测为 Go:
或者更具体地说,对于 godep、govendor 或 GB:
Heroku Go buildpack在应用程序满足以下要求之一时使用:
由此我可以得出结论,您.go
位于目录树根目录的单个文件不符合自动构建 Go 项目的激活标准。我建议在上述要求中选择一个依赖管理器并修改您的项目以支持它。之后,AutoDevops 应该开始构建您的项目。
如果在那之后您仍然遇到问题,此调试说明可能会有所帮助:
在确保项目符合 buildpack 要求后;如果仍然失败,设置项目变量
TRACE=true
将启用详细日志记录,这可能有助于继续进行故障排除。
推荐阅读
- javascript - Redux 使用 Map() 形成初始值
- angular - 如何将 yarn 设置为 Angular CLI 的默认 packageManager?我得到“无法读取 null 的属性‘值’”
- java - 尝试使用 Thymeleaf 处理模板时出错
- python - 创建一个 numpy 数组并在每次迭代中更新它的值
- java - 交叉编码 Integer.parseInt Java
- python - spark mllib 图像分类 python
- c - 传入函数参数的数组是否被视为按引用调用?
- node.js - nodejs 承诺从那时起返回值
- python - 在 python AWS lambda 中使用 aws 加密 SDK
- ios - GMSMarker 自定义图标未根据坐标出现。iOS - 斯威夫特 - 谷歌地图