LoginSignup
0
0

More than 5 years have passed since last update.

Wercker で dep を使った Golang のビルド

Last updated at Posted at 2018-01-01

はじめに

Wercker で依存モジュールを管理を使った Golang の CI を実施しようとしてハマった。
次回は時間を取られないように記録。
※こういった類のものは Scrapbox.io に書いた方がいいのかと思いつつ、一旦こちらへ。

tl;dr

Wercker の golang box の WERCKER_SOURCE_DIR がディフォルトでは GOPATH の配下になっていないので wercker/setup-go-workspace などを利用して GOPATH 配下にする。

local の Wercker CLI での wercker build が通るのに Wercker の Web 側で同じ原因で失敗するのでこの方法は間違いかもしれません。現在調査中。

追記(2018/01/04):

一旦 glide でやることにしました。 Wercker で glide を使った Golang のビルド

環境

  • Wercker
    • box: golang:latest (※2017.01.01の実行時で Go 1.9)

困ったこと

Wercker の Golang の box の構成として

  • GOPATH : /go
  • WERCKER_SOURCE_DIR : /pipeline/source

となっている。そのため、Wercker が処理対象にするソースは /pipeline/source となる。しかし、このパスは $GOPATH/src 配下ではない。

諸々調べたところ Go のモジュール依存関係管理は dep を使うのが推奨されているようだった。

そこで dep で依存モジュールをインストールすると、モジュールは /pipeline/source/vendor/* に配置されてくれればよいのだが、実際には

/pipeline/source is not within a known GOPATH/src

とエラーメッセージが出る。このエラーメッセージ、本家にIssueが上がっていて

dep init fails if in not in $GOPATH[…]/src/{somedir..} #148

ステータスが Open なので $GOPATH/src = /go/src 配下にインストールする必要があった。

解決方法

一番簡単なワークアラウンドとしては dep status をパーズして go get してプロジェクト配下の vendorディレクトリではなく、グローバルの GOPATH 側にインストール方法がある。

しかし、せっかく dep を使っているのに「それどうなのよ」感があるので調べて wercker/setup-go-workspace にたどり着いた。

build:
    steps:
        - wercker/setup-go-workspace:
          package-dir: <SOME_PATH>

を設定すると /go/src/<SOME_PATH>/vendor/* にインストールされるようになり、これは $GOPATH/src 以下になるので dep でのインストールが可能になる。

参考

0
0
0

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
0
0