1. dev环境部署
(1) 修改 .gitlab-ci.yml
//.gitlab-ci.yml
variables:
REGISTRY: $CI_REGISTRY/edu-java-demo/edu-java-spring
MAVEN_OPTS: "-Dmaven.repo.local=.m2"
stages:
- test
- build
- package
- review
test:
stage: test
image: harbor.xiodi.cn/tools/openjdk:11.0.6
tags:
- docker
- host20133-docker
script:
- chmod +x ./mvnw && ./mvnw test
cache:
key: maven-repo-cache
paths:
- .m2
build:
stage: build
image: harbor.xiodi.cn/tools/openjdk:11.0.6
tags:
- docker
- host20133-docker
script:
- chmod +x ./mvnw && ./mvnw package
cache:
key: maven-repo-cache
paths:
- .m2
artifacts:
paths:
- target/*.jar
expire_in: 1 week
docker-package:
stage: package
image: harbor.xiodi.cn/tools/docker:18.09.9
services:
- docker:18.09-dind
tags:
- docker
- host20133-docker
variables:
REGISTRY_VERSION: $CI_COMMIT_SHORT_SHA
script:
- export
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $REGISTRY:$CI_COMMIT_SHORT_SHA -f Dockerfile .
- docker push $REGISTRY:$CI_COMMIT_SHORT_SHA
deploy_review:
stage: review
image: harbor.xiodi.cn/tools/kubectl:1.14.8
variables:
INGRESS_HOST: ${CI_COMMIT_REF_SLUG}.xiodi.cn
REGISTRY_VERSION: $CI_COMMIT_SHORT_SHA
tags:
- docker
- host20133-docker
environment:
name: review/$CI_COMMIT_REF_NAME
url: http://${CI_COMMIT_REF_SLUG}.xiodi.cn/hello
on_stop: stop_review
auto_stop_in: 7 day
script:
- kubectl delete --ignore-not-found=true secret regcred
- kubectl create secret docker-registry regcred --docker-server=$CI_REGISTRY --docker-username=$GITLAB_DEPLOY_USER --docker-password=$GITLAB_DEPLOY_PW
- cat Deploy/kubernetes/deployment-edu-java-spring.yml | envsubst | kubectl apply -f -
- cat Deploy/kubernetes/service-edu-java-spring.yml | envsubst | kubectl apply -f -
- cat Deploy/kubernetes/ingress-edu-java-spring.yml | envsubst | kubectl apply -f -
only:
- branches
except:
- dev
stop_review:
stage: review
image: harbor.xiodi.cn/tools/kubectl:1.14.8
variables:
GIT_STRATEGY: none
tags:
- docker
- host20133-docker
environment:
name: review/$CI_COMMIT_REF_NAME
action: stop
script:
- kubectl delete --ignore-not-found=true secret regcred
- kubectl delete --ignore-not-found=true -f Deploy/kubernetes/ingress-edu-java-spring.yml
- kubectl delete --ignore-not-found=true -f Deploy/kubernetes/service-edu-java-spring.yml
- kubectl delete --ignore-not-found=true -f Deploy/kubernetes/deployment-edu-java-spring.yml
when: manual
deploy_dev:
stage: integration-test
image: harbor.xiodi.cn/tools/kubectl:1.14.8
variables:
INGRESS_HOST: dev.xiodi.cn
REGISTRY_VERSION: $CI_COMMIT_SHORT_SHA
tags:
- docker
- host20133-docker
environment:
name: dev
url: http://dev.xiodi.cn/hello
on_stop: stop_dev
auto_stop_in: 7 day
script:
- kubectl delete --ignore-not-found=true secret regcred
- kubectl create secret docker-registry regcred --docker-server=$CI_REGISTRY --docker-username=$GITLAB_DEPLOY_USER --docker-password=$GITLAB_DEPLOY_PW
- cat Deploy/kubernetes/deployment-edu-java-spring.yml | envsubst | kubectl apply -f -
- cat Deploy/kubernetes/service-edu-java-spring.yml | envsubst | kubectl apply -f -
- cat Deploy/kubernetes/ingress-edu-java-spring.yml | envsubst | kubectl apply -f -
only:
- dev
stop_dev:
stage: integration-test
image: harbor.xiodi.cn/tools/kubectl:1.14.8
variables:
GIT_STRATEGY: none
tags:
- docker
- host20133-docker
environment:
name: dev
action: stop
script:
- kubectl delete --ignore-not-found=true secret regcred
- kubectl delete --ignore-not-found=true -f Deploy/kubernetes/ingress-edu-java-spring.yml
- kubectl delete --ignore-not-found=true -f Deploy/kubernetes/service-edu-java-spring.yml
- kubectl delete --ignore-not-found=true -f Deploy/kubernetes/deployment-edu-java-spring.yml
when: manual
(2) 创建合并请求
feature-1 -> dev
合并完成后,此时,会自动触发 .gitlab-ci.yml 文件执行,进行 dev 环境部署
2. stage 环境部署
预生产环境(stage),我们打算以 release 来创建。
//修改 .gitlab-ci.yml
...
stages:
- test
- build
- package
- review
- integration-test
- stage-test
...
docker-package:
stage: package
image: harbor.xiodi.cn/tools/docker:18.09.9
services:
- docker:18.09-dind
tags:
- docker
- host20133-docker
variables:
REGISTRY_VERSION: $CI_COMMIT_SHORT_SHA
script:
- export
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $REGISTRY:$CI_COMMIT_SHORT_SHA -f Dockerfile .
- test ! -z "${CI_COMMIT_TAG}" && docker tag $REGISTRY:$CI_COMMIT_SHORT_SHA $REGISTRY:${CI_COMMIT_TAG} && docker push $REGISTRY:${CI_COMMIT_TAG}
- docker push $REGISTRY:$CI_COMMIT_SHORT_SHA
...
deploy_stage:
stage: stage-test
image: harbor.xiodi.cn/tools/kubectl:1.14.8
variables:
INGRESS_HOST: stage.xiodi.cn
REGISTRY_VERSION: $CI_COMMIT_TAG
tags:
- docker
- host20133-docker
environment:
name: stage
url: http://stage.xiodi.cn/hello
on_stop: stop_stage
auto_stop_in: 7 day
script:
- export
- kubectl delete --ignore-not-found=true secret regcred
- kubectl create secret docker-registry regcred --docker-server=$CI_REGISTRY --docker-username=$GITLAB_DEPLOY_USER --docker-password=$GITLAB_DEPLOY_PW
- cat Deploy/kubernetes/deployment-edu-java-spring.yml | envsubst | kubectl apply -f -
- cat Deploy/kubernetes/service-edu-java-spring.yml | envsubst | kubectl apply -f -
- cat Deploy/kubernetes/ingress-edu-java-spring.yml | envsubst | kubectl apply -f -
only:
variables:
- $CI_COMMIT_TAG =~ /^release.*/
stop_stage:
stage: stage-test
image: harbor.xiodi.cn/tools/kubectl:1.14.8
variables:
GIT_STRATEGY: none
tags:
- docker
- host20133-docker
environment:
name: stage
action: stop
script:
- kubectl delete --ignore-not-found=true secret regcred
- kubectl delete --ignore-not-found=true -f Deploy/kubernetes/ingress-edu-java-spring.yml
- kubectl delete --ignore-not-found=true -f Deploy/kubernetes/service-edu-java-spring.yml
- kubectl delete --ignore-not-found=true -f Deploy/kubernetes/deployment-edu-java-spring.yml
when: manual
only:
variables:
- $CI_COMMIT_TAG =~ /^release.*/
创建 release-1.0 tag。