在Google云容器构建器上使用go-dep

简而言之

    • depはまだ人柱感満載

 

    GCCBでdep使うなら-vendor-onlyをつけるべし

使用谷歌云容器构建器(Google Cloud Container Builder,GCCB)时,dep会出现问题。

因为我正在一个相对较大的开发分支上进行工作,所以大约两周没有在GCCB上部署了。当我尝试使用dep部署时遇到了问题。
错误消息大致如下:

Step #6 - "dep-ensure": Running: dep ensure
Step #6 - "dep-ensure": Found 5 errors:
Step #6 - "dep-ensure": 
Step #6 - "dep-ensure": import path app/gopath/src/github.com/golang/dep/internal/gps/_testdata/src/relimport/dotslash had a local import: "./simple"
Step #6 - "dep-ensure": import path app/gopath/src/github.com/golang/dep/internal/gps/_testdata/src/relimport/dotdotslash had a local import: "../github.com/golang/dep/internal/gps"
Step #6 - "dep-ensure": import path app/gopath/src/github.com/golang/dep/internal/gps/_testdata/src/relimport/dotdot had a local import: ".."
Step #6 - "dep-ensure": /workspace/gopath/src/github.com/golang/dep/cmd/dep/testdata/harness_tests/ensure/pkg-errors/case2/initial/bar/bar.go:3:51: expected 'package', found 'EOF'
Step #6 - "dep-ensure": /workspace/gopath/src/github.com/golang/dep/internal/gps/_testdata/src/bad/bad.go:6:43: expected 'package', found 'EOF'

因为在dep内的testdata中使用了本地导入,所以不行。
这是用于dep测试的源代码。

顺便说一下,在本地下当然没有发生错误。

确认dep的发布

由于GCCB每次都在Docker内通过go-get安装dep,所以导致它总是运行在最新的dep上。
换句话说,dep本身作为一个用于版本固定依赖关系的工具,目前无法固定其版本。
(可以通过创建Docker来解决这个问题)

我来看看dep的发布。
据说在0.3.0版本上进行了较大的重构。
确实,在这个发布之后,我还没有进行过部署。

– 仅供应商选项

从0.3.0版本开始,ensure命令新增了一些选项,其中包括-vendor-only选项。查看帮助可以了解更多信息。

只从 Gopkg.lock 文件中填充 vendor/ 目录,而不先更新 (默认为 false)。

根据问题的提出,似乎只需要从Gopkg.lock中下载依赖到vendor文件夹,而不需要解析*.go文件。因为前面提到的错误是在解析*.go文件时发生的,通过指定此选项成功避免了该错误。

总结

    • depはまだ人柱感があって地雷を踏みぬく覚悟が必要そうです

depがv1.0になって、GCCB Official Repositoryでサポートしてくれないかなー
それまではDockerHubあたりにバージョン固定でimageを作っておくのが無難かも

选项的原本目的不同,但是…
bannerAds