Posted at

Google Cloud Container Builderでgo-depを使う

More than 1 year has passed since last update.


tl;dr


  • depはまだ人柱感満載

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


Google Cloud Container Builder(GCCB)でdepが転ける

ちょっと大きめの開発ブランチで作業していたんで、2週間ぶりぐらいにGCCBでdeployしたら、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内でlocal import使ってるからだめよって。。

ってこれ、depのtest用のソースなんですけど…

ちなみにローカルではもちろんエラーになっていない。


depのリリースを確認

GCCBでは毎回Docker内でgo-getしてdepをいれるので最新のdepで実行されてしまう。

つまり、dependencyのバージョン固定のためのツールであるdep自体のバージョンを現状では固定できない。

(Docker作っておけばいいんだけど)

それでdepのリリースをみてみる。

0.3.0というバージョンで大きめのリファクタがされたらしい。

たしかにこのリリースの後にデプロイしたことない。


-vendor-onlyオプション

0.3.0からensureにいくつかオプションが追加されたのですが、-vendor-onlyオプションが追加されました。

helpみると


-vendor-only populate vendor/ from Gopkg.lock without updating it first (default: false)


とあります。

導入の経緯はIssueにありますが、*.goを解析することなく、Gopkg.lockからvendorにDLしてくれるだけのようです。

前述のエラーは*.goの解析時にエラーとなっていたので、このオプションを指定することで無事回避1できました。


まとめ


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


    • depがv1.0になって、GCCB Official Repositoryでサポートしてくれないかなー

    • それまではDockerHubあたりにバージョン固定でimageを作っておくのが無難かも







  1. オプションの本来の目的と違いますが…