LoginSignup
3

More than 5 years have passed since last update.

Google Cloud Container Builderでgo-depを使う

Posted at

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. オプションの本来の目的と違いますが… 

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3