在通过drone.io提交代码和构建应用程序时,如何在代码中提供所需的go模块?

时间:2019-07-18 10:31:15

标签: go github go-modules

我开发了一个go服务并将其部署在GAE上。在开发此应用程序时,我在工作机中包括了使用命令运行所需的go模块-

go get -u <module-name> 

我可以使用以下命令包含其他必需的go模块-

adtech-adlib-web> go mod init

它创建了一个带有消息的go.mod文件-

go: creating new go.mod: module github.com/nytm/adtech-adlib-web

然后,我执行以下命令以将供应商文件夹中的所需模块下载为-

adtech-adlib-web> go mod vendor

现在,我想在我的功能分支中提交此go代码,在该分支中代码通过仓库中的.drone.io工具自动部署。但是,我的构建仅因错误而失败:

cannot find package "backend" in any of:
/drone/src/github.com/nytm/adtech-adlib-web/vendor/backend (vendor tree)
/usr/local/go/src/backend (from $GOROOT)
/drone/src/backend (from $GOPATH) 

在我的.drone.yml文件部分中创建问题的是-

  backend-test:
image: jprobinson/golang-gcloud-sdk:1.11
environment:
  - GOPATH=/drone
  - PATH=/bin:/usr/bin:/usr/local/go/bin:/usr/local/go_appengine
commands:
  - go test -v ./backend/...
when:
  event: [push, pull_request]

我不知道如何解决此问题?如果go mod供应商可以在这种情况下提供帮助,那么如何使用它以及我必须在哪个文件夹级别执行此操作?请说明所有执行步骤。

2 个答案:

答案 0 :(得分:0)

根据此错误消息,您似乎正在以GOPATH模式构建(禁用了模块)。

cannot find package "backend" in any of:
/drone/src/github.com/nytm/adtech-adlib-web/vendor/backend (vendor tree)
/usr/local/go/src/backend (from $GOROOT)
/drone/src/backend (from $GOPATH)  <--- building in GOPATH mode

尝试在您的环境中设置GO111MODULE=on。由于您使用的是供应商目录,因此您可能还需要设置-mod=vendor以确保从供应商目录而不是模块缓存(和网络)中加载软件包。

未设置GO111MODULE或将auto设置为GOPATH时,仅在LocalSocket外部启动构建时才启用模块感知模式。这将在go1.13中更改:如果任何父目录中有go.mod文件,则模块也会启用。

答案 1 :(得分:0)

我忘了在main.go中以我的golang服务文件夹的完整github路径开头-

导入( ....

后端“ github.com/org_name/repo_name/backend”

......... )