Building Go Apps with Gitlab CI

Gitlab CI is amazing. I love how well it works… when you finally get it setup correctly. With Go, some of the articles on the Web state that you need to install the entire Go environment. These articles are out of date. Getting everything working made the YAML file messy and convoluted.

With recent updates to Gitlab, just use the golang docker image from DockerHub (it’s an official image, so it’s safe). My gitlab-ci.yml file now looks like this:

stages:
  - build

build-client:
  image: golang:1.7
  stage: build
  script:
    - mkdir -p /go/src/gitlab.com/typicalrunt
    - ln -s /builds/typicalrunt/website.go /go/src/gitlab.com/typicalrunt/website.go
    - go build gitlab.com/typicalrunt/website.go/cli/awesome

Some things to note:

  • Use the Docker image golang pin it to a specific version for reliable builds.
  • Your code is cloned into the container in a directory called /builds/$GROUP/$PROJECT. Substitute $GROUP and $PROJECT for values specific to you.
  • Since the $GOPATH it set to /go, you need to symlink in your code into the proper directory. You may have to create the directory structure first (hence my use of mkdir).
  • Run go build with your package name and you’re done.