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を作っておくのが無難かも
-
オプションの本来の目的と違いますが… ↩