go - 在 gcp cloudbuild 中使用“replace”指令失败
问题描述
我正在尝试使用serverless framework
cloudbuild 构建我的 go 应用程序。
这是我的项目结构
/api
/giam
go.mod
API.go
/other_folders...
/util
go.mod
util.go
这是我的构建步骤:
steps:
- name: 'gcr.io/cloud-builders/npm'
args: ['install']
- name: 'softinstigate/serverless'
args: ['deploy', '-v']
dir: 'api/giam'
env: ['PROJECT_ROOT=${REPO_NAME}', 'GO111MODULE=on']
这是我go.mod
的api/giam
module mybackend
require bitbucket.org/myusername/mybackend/util v0.0.0
replace bitbucket.org/myusername/mybackend/util => /workspace/util
我确认go.mod
我的util
文件夹中有一个。
这是内容
module util
require cloud.google.com/go v0.37.1
错误
运行 cloudbuild 时出现此错误..
{"ResourceType":"cloudfunctions.v1beta2.function","ResourceErrorCode":"400","ResourceErrorMessage":"Build failed: go: parsing util/go.mod: open /workspace/util/go.mod: no such file or directory\ngo: error loading module requirements\n"}
如果我做对了,错误是它找不到/workspace/util/go.mod
我ls
在cloudbuild中尝试过,特别是在/workspace/util
我找到了go.mod
文件。
我很卡在这里..我不知道下一步该怎么做..
解决方案
我设法通过使用vendor
和省略go.mod
以及go.sum
在无服务器包中(通过使用 package.exclude)使其工作。
这是我的更新cloudbuild.yaml
:
steps:
- name: 'gcr.io/cloud-builders/npm'
args: ['install']
- name: 'gcr.io/cloud-builders/go'
dir: 'api/giam'
args: ['mod', 'edit', '-replace', 'bitbucket.org/myusername/mybackend/util=/workspace/util']
env: ['GOPATH=/src', 'GO111MODULE=on']
- name: 'gcr.io/cloud-builders/go'
dir: 'api/giam'
args: ['mod', 'vendor']
env: ['GOPATH=/src', 'GO111MODULE=on']
- name: 'softinstigate/serverless'
args: ['deploy', '-v']
dir: 'api/giam'
env: ['GOPATH=/src', 'GO111MODULE=on']
我的go.mod
:
module mybackend
require (
bitbucket.org/myusername/mybackend/util v0.0.0
google.golang.org/api v0.2.1-0.20190318183801-2dc3ad4d67ba
)
replace bitbucket.org/myusername/mybackend/util => ../../util
根据https://github.com/GoogleCloudPlatform/golang-samples/issues/743中的github问题,它说您需要在部署中排除 go.mod 和 go.sum ,否则将不会使用供应商。这就是为什么serverless.yml
我使用:
package:
exclude:
- ./**
include:
- vendor/**
- '*.go'
推荐阅读
- python - 使用 PIL 创建多级椭圆
- python - Uvicorn/FastAPI 可执行文件
- angular - 如果用户未登录,如何重定向到 Angular 自定义登录页面
- html - 一段时间后,NodeJS 没有成功将数据插入 MongoDB
- service - Openstack 计算服务和 novcn 控制台不工作
- javascript - 为什么 Plaid.create 函数不返回任何输出?
- laravel - 如何将图像从 React-Native 上传到 Laravel 后端?
- javascript - 在 a 中添加删除按钮
- 单击时将其删除
- python - 这个算法注定是顺序的吗?它可以以某种方式优化吗?(麻木)
- sql - 从 group_concat 复制结果