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
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
test stage passes.