首页 > 解决方案 > 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 pushAutoDevops 确实开始构建我的 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 跟进) .

标签: gogitlabgitlab-ci

解决方案


来自AutoDevops 文档

Auto Build 通过以下两种方式之一创建应用程序的构建:

  • 如果有 Dockerfile,它会使用 docker build 来创建一个 Docker 镜像。
  • 否则,它将使用HerokuishHeroku buildpacks自动检测应用程序并将其构建到 Docker 映像中。

然后根据Heroku Go buildpack文档查看构建激活标准:

如果您使用以下任一方式,此 buildpack 会将您的存储库检测为 Go:

或者更具体地说,对于 godep、govendor 或 GB

Heroku Go buildpack在应用程序满足以下要求之一时使用:

  • 有一个Godeps/Godeps.json文件,将应用程序标识为由godep管理;
  • 有一个vendor/vendor.json文件,将应用程序标识为由govendor管理;
  • 有一个src目录,其中有子目录,包含一个或多个 .go 文件,将应用程序标识为由gb管理。

由此我可以得出结论,您.go位于目录树根目录的单个文件不符合自动构建 Go 项目的激活标准。我建议在上述要求中选择一个依赖管理器并修改您的项目以支持它。之后,AutoDevops 应该开始构建您的项目。

如果在那之后您仍然遇到问题,此调试说明可能会有所帮助:

在确保项目符合 buildpack 要求后;如果仍然失败,设置项目变量TRACE=true将启用详细日志记录,这可能有助于继续进行故障排除。


推荐阅读