gpt4 book ai didi

go - 在 gcp cloudbuild 中使用 `replace` 指令失败

转载 作者:IT王子 更新时间:2023-10-29 02:19:24 25 4
gpt4 key购买 nike

我正在尝试在 cloudbuild 中使用 serverless framework 构建我的 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']

这是我在 api/giam 中的 go.mod

module mybackend

require bitbucket.org/myusername/mybackend/util v0.0.0

replace bitbucket.org/myusername/mybackend/util => /workspace/util

并且我确认我的 util 文件夹中有一个 go.mod

这是内容

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

我在 cloudbuild 中尝试了 ls,特别是在 /workspace/util 中,我找到了 go.mod 文件。

我被困在这里..我不知道下一步该做什么..

最佳答案

我设法通过使用 vendor 并在无服务器包中省略 go.modgo.sum(通过使用 package.排除)。

这是我更新的 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,否则将不会使用 vendor 。这就是为什么在 serverless.yml 中我使用:

package:
exclude:
- ./**
include:
- vendor/**
- '*.go'

关于go - 在 gcp cloudbuild 中使用 `replace` 指令失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55254054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com