Help us understand the problem. What is going on with this article?

Google Cloud Container Builderでgo-depを使う

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

mohikanz
エンジニアのための雑談コミュニティ
https://mohikanz.slack.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away