chrly/.gitlab-ci.yml

96 lines
2.5 KiB
YAML
Raw Normal View History

# Предполагается, что между работой "build docker container" и этапом push
# построенные docker images остаются статичными и никуда не пропадают
#
# В противном случае их нужно после каждого этапа билда пушить в registry
2016-12-03 04:35:23 +05:30
stages:
- test
- build
- build_docker_image
- push
- cleanup
2016-12-03 04:35:23 +05:30
variables:
CONTAINER_IMAGE: registry.ely.by/elyby/skinsystem
.golang_template: &setup_go_environment
image: golang:1.8.3-stretch
before_script:
- mkdir -p $GOPATH/src/$CI_PROJECT_NAMESPACE
- cp -r $(pwd) $GOPATH/src/$CI_PROJECT_PATH
- cd $GOPATH/src/$CI_PROJECT_PATH
- go get -u github.com/golang/dep/cmd/dep
- $GOPATH/bin/dep ensure
.docker_template: &setup_docker_environment
image: docker:latest
before_script:
- docker login -u gitlab-ci -p $CI_BUILD_TOKEN registry.ely.by
- export TEMP_IMAGE_NAME="$CONTAINER_IMAGE:$CI_PIPELINE_ID"
2016-12-03 04:35:23 +05:30
test:
<<: *setup_go_environment
stage: test
script:
- ./script/coverage
build executable:
<<: *setup_go_environment
stage: build
script:
- export VERSION="${CI_BUILD_TAG:-dev-$CI_BUILD_REF_NAME-${CI_BUILD_REF:0:8}+build-$CI_BUILD_ID}"
- >
env GOOS=linux
go build
-o $CI_PROJECT_DIR/minecraft-skinsystem
-ldflags "-X ${CI_PROJECT_NAMESPACE}/bootstrap.version=${VERSION}"
main.go
artifacts:
name: "${CI_JOB_STAGE} executable"
paths:
- $CI_PROJECT_DIR/minecraft-skinsystem
expire_in: 1 day
build docker image:
<<: *setup_docker_environment
stage: build_docker_image
script:
- docker build -t $TEMP_IMAGE_NAME -f docker/Dockerfile .
only:
- tags
- develop
push dev:
<<: *setup_docker_environment
stage: push
variables:
GIT_STRATEGY: none
script:
- export IMAGE_NAME="$CONTAINER_IMAGE:dev"
- docker tag $TEMP_IMAGE_NAME $IMAGE_NAME
- docker push $IMAGE_NAME
only:
- develop
push tag:
<<: *setup_docker_environment
stage: push
variables:
GIT_STRATEGY: none
script:
- export IMAGE_NAME="$CONTAINER_IMAGE:$CI_BUILD_TAG"
- export LATEST_IMAGE_NAME="$CONTAINER_IMAGE:latest"
- docker tag $TEMP_IMAGE_NAME $IMAGE_NAME
- docker tag $TEMP_IMAGE_NAME $LATEST_IMAGE_NAME
- docker push $IMAGE_NAME
- docker push $LATEST_IMAGE_NAME
only:
- tags
cleanup temp image:
<<: *setup_docker_environment
stage: cleanup
when: always
script:
- docker rmi $TEMP_IMAGE_NAME || true