えぞてくブログ

ITと北海道と日常と、そんな日々を綴ります

GitLab CI+golangで散々はまった話

3月も下旬に差し掛かり、北海道もようやく春めいてきました。

年始からのバタバタも落ち着き、手をつけていたWebサービスの開発に時間が割ける余裕をどうにか捻出。 プロジェクト管理にはGitLabを使っているのですが、本格的にソースを触り始める前に、CI/CDの設定をしておこうとして、大ハマリ。

GItLabでは、リポジトリのトップに、CI/CDのタスク内容を記述した.gitlab-ci.ymlを置いておけば、git push時などに自動的にCI/CDが実行されます。今回は、ExecuterにDockerを利用しています。

image: golang:1.10
stages:
  - build
  - test

build-my-project:
  stage: build
  script:
    - go build

test-my-project:
  stage: test
  script:
    - go test

早速、git push。ブラウザでCI/CDの実行結果を確認…( ゚д゚)ん?

Cloning repository...
Cloning into '/builds/team-name/repo'...
Checking out 529211b5 as blog...
Skipping Git submodules setup
$ go build
server.go:14:2: cannot find package "github.com/team-name/repo/apis" in any of:
    /usr/local/go/src/github.com/repo/apis (from $GOROOT)
    /go/src/github.com/repo/apis (from $GOPATH)
server.go:15:2: cannot find package "github.com/team-name/repo/app" in any of:
    /usr/local/go/src/github.com/repo/app (from $GOROOT)
    /go/src/github.com/repo/app (from $GOPATH)
server.go:16:2: cannot find package "github.com/team-name/repo/daos" in any of:
    /usr/local/go/src/github.com/repo/daos (from $GOROOT)
    /go/src/github.com/repo/daos (from $GOPATH)
server.go:17:2: cannot find package "github.com/team-name/repo/errors" in any of:
    /usr/local/go/src/github.com/repo/errors (from $GOROOT)
    /go/src/github.com/repo/errors (from $GOPATH)
server.go:18:2: cannot find package "github.com/team-name/repo/services" in any of:
    /usr/local/go/src/github.com/repo/services (from $GOROOT)
    /go/src/github.com/repo/services (from $GOPATH)
server.go:13:2: cannot find package "github.com/lib/pq" in any of:
    /usr/local/go/src/github.com/lib/pq (from $GOROOT)
    /go/src/github.com/lib/pq (from $GOPATH)
ERROR: Job failed: exit code 1

どうやら自分が見えていない。タスクにpwd仕込んでみると、リポジトリ自体は、/builds/にクローンされているものの、コンパイラ/go/src/配下を見にいってしまっている模様。検索してみると公式がヒット。既知の問題のようだ。

gitlab.com

早速、上記の記事に沿って回避策をタスクに追加。こうなる。

image: golang:1.10
stages:
  - build
  - test

before_script:
   - mkdir -p /go/src/github.com/team-name/
    - mv ../repo /go/src/github.com/team-name/
    - cd /go/src/github.com/team-name/repo

build-my-project:
  stage: build
  script:
    - go build

test-my-project:
  stage: test
  script:
    - go test

再度、git push。ブラウザでCI/CDの実行結果を確認…( ゚д゚)ん〜ん?

$ go build
/bin/bash: line 57: cd: /builds/iwacho/ichibo: No such file or directory
ERROR: Job failed: exit code 1

なにやら、cdコマンドで移動させてしまったリポジトリにいこうとして失敗している模様。自分では仕込んでいないので、ビルド結果をはき出す目的かなにかのためだろうか。ええい、めんどくさい。ディレクトリ残せばいいんでしょ。

before_script:
   - mkdir -p /go/src/github.com/team-name/
    - cp -fr ../repo /go/src/github.com/team-name/
    - cd /go/src/github.com/team-name/repo

これで無事CI/CDが通るようになりました。