This took a few tries to get right. I have a Go project that uses vendoring and has a few binaries to save as artifacts. Here’s the .gitlab-ci.yml file you should start with.
image: golang:1.7
variables:
REPO_NAME: gitlab.com/Preetam/my-project
before_script:
- go version
- echo $CI_BUILD_REF
- echo $CI_PROJECT_DIR
stages:
- test
- build
test-project:
stage: test
script:
- mkdir -p $GOPATH/src/$REPO_NAME
- mv $CI_PROJECT_DIR/* $GOPATH/src/$REPO_NAME
- cd $GOPATH/src/$REPO_NAME
- go test $(go list ./... | grep -v /vendor/)
build-project:
stage: build
script:
- mkdir -p $GOPATH/src/$REPO_NAME
- mv $CI_PROJECT_DIR/* $GOPATH/src/$REPO_NAME/
- mkdir -p $CI_PROJECT_DIR/artifacts
- cd $GOPATH/src/$REPO_NAME
- cd api && go build -o $CI_PROJECT_DIR/artifacts/api && cd ..
- cd internal-api && go build -o $CI_PROJECT_DIR/artifacts/internal-api && cd ..
- cd web && go build -o $CI_PROJECT_DIR/artifacts/web && cd ..
artifacts:
paths:
- artifacts/api
- artifacts/internal-api
- artifacts/web
You should change the REPO_NAME
variable to point to your own project.
I’m doing a couple of interesting things. First, I’m moving my project files
into my GOPATH
. That’s to make vendored packages work properly. Second, I’m
putting my binaries back in $CI_PROJECT_DIR
because GitLab doesn’t
support artifacts outside of the project directory.
I’m also setting up two stages in a pipeline so artifacts are only created if
the test
stage passes.