`go build -mod vendor`无法使用供应商的软件包

将我的Go服务部署到Google AppEngine(标准)时,我收到一条错误消息,说明找不到模块版本, </ p>

这些模块位于私有Github实例上,并检出到 vendor / </ code>。</ p>

A go build -mod vendor -o / dev / null ./...</ code>在本地,本地和Google Cloud Build中都可以使用cloud-build-本地。
在github上存在一个名为“ v1.1.0”的标签 .com / company / gosystem:</ p>

  gosystem $ git标签
v0.0.1
v0.0.2
v0.0.3
v1.0.0
v1.1.0
</ code > </ pre>

 无法构建应用:[en build -o / tmp / staging172777881 / usr / local / bin / start。]和env [PATH = / go / bin:/  usr / local / go / bin:/ builder / google-cloud-sdk / bin /:/ usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin主机名 = f3f56ce621f0 HOME = / builder / home BUILDER_OUTPUT = / builder / outputs DEBIAN_FRONTEND = noninteractive GOROOT = / usr / local / go / GOPATH = / go GO111MODULE =在GOCACHE = / tmp / cache019702820 GOPATH = /  go]失败:err =退出状态1,out =“ 
go:查找github.com/pquerna/otp v1.1.0
go:查找github.com/gin-gonic/gin v1.4.0
go:查找github.com / pkg / errors v0.8.1
go:查找github.com/rainycape/unidecode v0.0.0-20150907023854-cb7f23ec59be
go:查找github.com/gosimple/slug v1.5.0
go:查找github.com/boombuler/barcode v1.0.0
go:查找github.com/company/gosystem v1.1.0
go:查找github.com/oblq/i18n v0.0.0-20181031085821-98eec2978e00
go:查找github.com/go-pg/pg v8。 0.4+不兼容
go:查找golang.org/x/text v0.3.2
go:查找github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
go:查找github.com/modern-go/reflect2 v1.0.1
go:查找github.com/golang/protobuf v1.3.1
go:查找github.com/stretchr/testify v1.3.0
go:查找github.com/ugorji/go/codec v0.0.0-20190204201341- e444a5086c43
go:查找github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3
go:查找github.com/mattn/go-isatty v0.0.7
go:github.com/company/gosyst em@v1.1.0:未知修订版v1.1.0
</ code> </ pre>

grep -RI'gosystem @'* </ code>未报告任何内容。</ p >
</ div>

展开原文

原文

When deploying my Go services to Google AppEngine (standard), I receive an errors describing a module version not being found, while everything compiles fine.

The modules are on a private Github instance and checked out to vendor/.

A go build -mod vendor -o /dev/null ./... works in cloud-build-local, locally and in Google Cloud Build. A tag called 'v1.1.0' exists on github.com/company/gosystem:

gosystem$ git tag
v0.0.1
v0.0.2
v0.0.3
v1.0.0
v1.1.0
Failed to build app: [go build -o /tmp/staging172777881/usr/local/bin/start .] with env [PATH=/go/bin:/usr/local/go/bin:/builder/google-cloud-sdk/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=f3f56ce621f0 HOME=/builder/home BUILDER_OUTPUT=/builder/outputs DEBIAN_FRONTEND=noninteractive GOROOT=/usr/local/go/ GOPATH=/go GO111MODULE=on GOCACHE=/tmp/cache019702820 GOPATH=/go] failed: err=exit status 1, out="
go: finding github.com/pquerna/otp v1.1.0
go: finding github.com/gin-gonic/gin v1.4.0
go: finding github.com/pkg/errors v0.8.1
go: finding github.com/rainycape/unidecode v0.0.0-20150907023854-cb7f23ec59be
go: finding github.com/gosimple/slug v1.5.0
go: finding github.com/boombuler/barcode v1.0.0
go: finding github.com/company/gosystem v1.1.0
go: finding github.com/oblq/i18n v0.0.0-20181031085821-98eec2978e00
go: finding github.com/go-pg/pg v8.0.4+incompatible
go: finding golang.org/x/text v0.3.2
go: finding github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
go: finding github.com/modern-go/reflect2 v1.0.1
go: finding github.com/golang/protobuf v1.3.1
go: finding github.com/stretchr/testify v1.3.0
go: finding github.com/ugorji/go/codec v0.0.0-20190204201341-e444a5086c43
go: finding github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3
go: finding github.com/mattn/go-isatty v0.0.7
go: github.com/company/gosystem@v1.1.0: unknown revision v1.1.0

A grep -RI 'gosystem@' * reports nothing.

dongqiu8375
dongqiu8375 嗯,看来您已经完成了,谢谢。
大约一年之前 回复
douzhong5902
douzhong5902 顺便说一句,请参阅问题#27227。这不是你所经历的吗?如果是,请您插话并描述您的用例吗?
大约一年之前 回复
doog1092
doog1092 与GO111MODULE=auto相同:这适用于go构建,但不适用于gcloud应用程序部署。
大约一年之前 回复
dongwuwu6104
dongwuwu6104 可能是因为GO111MODULE=on关闭了供应?如果将其设置为自动会怎样?这里的措辞没有实际意义,所以我只是在猜测。另外,如果您确实对/vendor下的所有必需内容进行了手动签出,则不妨尝试GO111MODULE=off并使用未经修饰的gobuild(w/o-mod=vendor)。请注意,这可能最终会中断(超过1.12的某个时间)。
大约一年之前 回复
dov11020
dov11020 让我印象深刻的是,那时gobuild-mod供应商不应该工作,或者gcloud应用程序部署未处于“供应商模式”。
大约一年之前 回复
doujie9882
doujie9882 嗯,从您的评论措辞来看,我认为您可能对/vendor的工作方式有错误的认识:在“模块”模式下使用go工具集时,卖方实际上应放弃任何下载内容的尝试:卖方是要随身携带您的部门以及您的代码(通常带有完整的源代码)。因此,转到build-mod=vendor必须仅在/vendor下查看并使用其中的内容。
大约一年之前 回复
douku1984
douku1984 嘿!足够奇怪的是,如果没有-mod供应商,则gobuild将触发$GOPATH/pkg/mod中的软件包下载。我很惊讶该构建无法正常工作,因为由于gobuild-mod供应商,vendor/目录应该包含所有内容?
大约一年之前 回复
donglun7151
donglun7151 该文档说,当gobuild-mod=vendor工作时,它将忽略go.mod文件中的版本控制信息。在您的设置中,情况似乎并非如此。因此,有两点:1)您可以确保您的供应商目录确实包含正确的导入路径名吗?2)运行gobuild,不重定向其输出,并使用-x使它知道正在做什么,并且有很多细节?我也发现有趣的是,错误的第一行包含go:查找github.com/pquerna/otpv1.1.0。
大约一年之前 回复
dsfew215211
dsfew215211 如前所述,gobuild有效。我使用gobuild-modvendor-o/dev/null。/....我做了gomod供应商。
大约一年之前 回复
drzb7969753
drzb7969753 确定,然后将供应商与gomod一起使用。
大约一年之前 回复
douye2572
douye2572 我可能忘了提及,但是我可以私下访问这些存储库。模块已签出给供应商/。(由于构建工程)
大约一年之前 回复
douqi2804
douqi2804 如果您还有其他让go工具访问该存储库内容的方法,请考虑使用go.mod文件中的replace指令将获取操作重新定位到另一个URL。
大约一年之前 回复
dongyiyu882684
dongyiyu882684 使用Web浏览器对github.com/venclave/gosystem的简单访问将返回404。访问github.com/venclave表示“该组织没有公共存储库”。因此,难怪go无法获取该存储库:它不存在。
大约一年之前 回复

2个回答

In the end I was able to make this work by forcing go to use vendor, by adding this to the go.mod:

replace github.com/company/gosystem => ./vendor/github.com/company/gosystem



Go使用https来获取版本/依赖项。 即使您使用供应商,Go仍然会验证版本。 而且由于 github.com/venclave/gosystem </ code>是一个私有存储库,因此git无法访问它。</ p>

为此,很少有解决方法。</ p>

1-使用ssh:</ p>

  git config --global url.ssh://git@github.com/venclave.insteadOf https:  //github.com/venclave

2-使用GitHub令牌:</ p>

在此处 https://github.com/settings/tokens 。 </ p>

 导出GITHUB_TOKEN = xxx 
git配置--global url。“ https:// $ {GITHUB_TOKEN}:x-oauth-basic@github.com/venclave”。 “ https://github.com/venclave"

</ div>

展开原文

原文

Go uses https to fetch versions/dependencies. Even if you use vendor, Go will verify the version anyway. And since github.com/venclave/gosystem is a private repo, git can't get access to it.

There are few workarounds for this.

1 - Use ssh:

git config --global url.ssh://git@github.com/venclave.insteadOf https://github.com/venclave

2 - Use GitHub token:

Generate GITHUB_TOKEN here https://github.com/settings/tokens.

export GITHUB_TOKEN=xxx
git config --global url."https://${GITHUB_TOKEN}:x-oauth-basic@github.com/venclave".insteadOf "https://github.com/venclave"

dto5637
dto5637 我有点困惑,为什么这一步很重要? 由于我已经拥有所需的一切,因此已经通过go mod供应商或go mod下载下载到了供应商/?
大约一年之前 回复
douqiao4450
douqiao4450 另外,这可能会有所帮助。
大约一年之前 回复
dongmen5867
dongmen5867 go get使用HTTPS,请参阅此内容。 在使用dep工具通过ssh导入或获取供应商时,通常需要一些git config技巧:请参阅参考1和2。
大约一年之前 回复
doubi2228
doubi2228 您说“我正在通过SSH获取”是什么意思? 您是否使用我的第一个示例进行了配置? 如果不是-go模块将使用https,而不是ssh。
大约一年之前 回复
dtjpnd7517
dtjpnd7517 我通过密钥身份验证通过SSH进行了获取,并验证了所有内容都在vendor /中。 否则,构建将永远无法进行。
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问