Newer
Older
image: golang:1.8.3
# The problem is that to be able to use go get, one needs to put
# the repository in the $GOPATH. So for example if your gitlab domain
# is mydomainperso.com, and that your repository is repos/projectname, and
# the default GOPATH being /go, then you'd need to have your
# repository in /go/src/mydomainperso.com/repos/projectname
# Thus, making a symbolic link corrects this.
before_script:
- mkdir -p /go/src/gitlab.zerbytes.net/${CI_PROJECT_NAMESPACE}
- ln -sf ${CI_PROJECT_DIR} /go/src/gitlab.zerbytes.net/${CI_PROJECT_PATH}
- cd /go/src/gitlab.zerbytes.net/${CI_PROJECT_PATH}/
stages:
- test
- build
- release
- deploy
test:
stage: test
script:
- go get -u github.com/kardianos/govendor
- /go/bin/govendor test +local
compile:
stage: build
script:
# Add here all the dependencies, or use glide/govendor/...
# to get them automatically.
# Better put this in a Makefile
- go build -race -ldflags "-X gitlab.zerbytes.net/${CI_PROJECT_PATH}/vendor/github.com/prometheus/common/version.Version=1.0.2 -X gitlab.zerbytes.net/${CI_PROJECT_PATH}/vendor/github.com/prometheus/common/version.Revision=${CI_COMMIT_SHA} -X gitlab.zerbytes.net/${CI_PROJECT_PATH}/vendor/github.com/prometheus/common/version.Branch=${CI_COMMIT_REF_NAME} -X gitlab.zerbytes.net/${CI_PROJECT_PATH}/vendor/github.com/prometheus/common/version.BuildUser=$(whoami)@$(hostname) -X gitlab.zerbytes.net/${CI_PROJECT_PATH}/vendor/github.com/prometheus/common/version.BuildDate=$(date +%Y%m%d-%H:%M:%S) -extldflags '-static'" -o app
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
artifacts:
paths:
- app
# TODO Add release upload to S3 storage
image_build:
stage: release
image: docker:latest
variables:
DOCKER_HOST: tcp://localhost:2375
services:
- docker:dind
script:
- docker info
- docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} registry.zerbytes.net
- docker build -t registry.zerbytes.net/${CI_PROJECT_PATH}:latest .
- docker tag registry.zerbytes.net/${CI_PROJECT_PATH}:latest registry.zerbytes.net/${CI_PROJECT_PATH}:${CI_COMMIT_REF_NAME}
- test ! -z "${CI_COMMIT_TAG}" && docker push registry.zerbytes.net/${CI_PROJECT_PATH}:latest
- docker push registry.zerbytes.net/${CI_PROJECT_PATH}:${CI_COMMIT_REF_NAME}
deploy_dev:
image: registry.gitlab.com/gitlab-examples/kubernetes-deploy
stage: deploy
environment:
name: dev
url: https://dev-presentation-gitlab-k8s.zerbytes.net
script:
- echo "${KUBE_CA_PEM}" > kube_ca.pem
- kubectl config set-cluster default-cluster --server=${KUBE_URL} --certificate-authority="$(pwd)/kube_ca.pem"
- kubectl config set-credentials default-admin --token=${KUBE_TOKEN}
- kubectl config set-context default-system --cluster=default-cluster --user=default-admin --namespace ${KUBE_NAMESPACE}
- kubectl config use-context default-system
- sed -i "s/__CI_ENVIRONMENT_SLUG__/${CI_ENVIRONMENT_SLUG}/" deployment.yaml ingress.yaml service.yaml
- sed -i "s/__VERSION__/${CI_COMMIT_REF_NAME}/" deployment.yaml ingress.yaml service.yaml
- kubectl cluster-info
- kubectl get deployments -l app=${CI_ENVIRONMENT_SLUG}
- kubectl create -f deployment.yaml || (kubectl delete -f deployment.yaml && kubectl create -f deployment.yaml)
- kubectl create -f service.yaml || true
- kubectl create -f ingress.yaml || kubectl replace -f ingress.yaml
deploy_live:
image: registry.gitlab.com/gitlab-examples/kubernetes-deploy
stage: deploy
environment:
name: live
url: https://live-presentation-gitlab-k8s.zerbytes.net
only:
- tags
when: manual
script:
- echo "${KUBE_CA_PEM}" > kube_ca.pem
- kubectl config set-cluster default-cluster --server=${KUBE_URL} --certificate-authority="$(pwd)/kube_ca.pem"
- kubectl config set-credentials default-admin --token=${KUBE_TOKEN}
- kubectl config set-context default-system --cluster=default-cluster --user=default-admin --namespace ${KUBE_NAMESPACE}
- kubectl config use-context default-system
- sed -i "s/__CI_ENVIRONMENT_SLUG__/${CI_ENVIRONMENT_SLUG}/" deployment.yaml ingress.yaml service.yaml
- sed -i "s/__VERSION__/${CI_COMMIT_REF_NAME}/" deployment.yaml ingress.yaml service.yaml
- kubectl cluster-info
- kubectl get deployments -l app=${CI_ENVIRONMENT_SLUG}
- kubectl create -f deployment.yaml || kubectl replace -f deployment.yaml
- kubectl create -f service.yaml || true
- kubectl create -f ingress.yaml || kubectl replace -f ingress.yaml