-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.gitlab-ci.yml
129 lines (119 loc) · 4.69 KB
/
.gitlab-ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
image: dr-dev.ampr.network:443/devops/builder:1.1.1
stages:
- ampr-build
- ampr-deploy
.before_script_template: &before_script_template
before_script:
- | # dns, reduce queries
cat /opt/hosts >> /etc/hosts
- | # internal vars (if APPLICATION_NAME_DEFINED is set it will be used, otherwise CI_PROJECT_NAME)
[[ -z ${APPLICATION_NAME_DEFINED} ]] && export APPLICATION_NAME_DEFINED=${CI_PROJECT_NAME}
export APPLICATION_NAME=${APPLICATION_NAME_DEFINED}-${CI_COMMIT_REF_SLUG}
export ENV=${CI_ENVIRONMENT_NAME}
[[ -z ${INGRESS_HOST} ]] && export INGRESS_HOST=${APPLICATION_NAME}.${DOMAIN}
export DOCKER_IMAGE=${DR_HOST}/${CI_COMMIT_REF_SLUG}/${APPLICATION_NAME}
export DOCKER_IMAGE_TAG=1.0.${CI_PIPELINE_ID}
# [[ $ENV == "production" ]] && export INGRESS_TARGET=""
- | # outputs
echo ""
echo "[INFO] APPLICATION_NAME: ${APPLICATION_NAME}"
echo "[INFO] INGRESS_HOST: ${INGRESS_HOST} (${INGRESS_TYPE}, proxied=${DNS_CF_PROXIED})"
echo "[INFO] INGRESS_TARGET: ${INGRESS_TARGET}"
echo "[INFO] DOCKER: ${DOCKER_IMAGE}:${DOCKER_IMAGE_TAG}"
echo "[INFO] HELM: ${APPLICATION_NAME}:${DOCKER_IMAGE_TAG} (${CM_HOST})"
echo "[INFO] ENV: ${ENV}"
# === BUILD ===
.ampr-build:
stage: ampr-build
variables:
DOCKER_DRIVER: overlay2
XDG_CACHE_HOME: /cache
<<: *before_script_template
script:
- | # if Production
echo "[INFO] --- env check"
[[ $ENV == "production" ]] && echo "$(cat /opt/ips) $(echo $DR_HOST | cut -d":" -f1)" | tee -a /etc/hosts
[[ $ENV == "production" ]] && echo "$(cat /opt/ips) $(echo $CM_HOST | cut -d"/" -f3 | cut -d":" -f1)" | tee -a /etc/hosts
- | # NPM
echo "[INFO] --- NPM Build"
if [[ ${ENV} == "development" ]]; then
npm set registry $NPM_HOST && npm install && npm run build-development
fi
if [[ ${ENV} == "staging" ]]; then
npm set registry $NPM_HOST && npm install && npm run build-staging
fi
if [[ ${ENV} == "production" ]]; then
npm set registry $NPM_HOST && npm install && npm run build
fi
- | # Docker
echo "[INFO] --- Docker Build (${DOCKER_IMAGE}:${DOCKER_IMAGE_TAG})"
docker build --no-cache -t ${DOCKER_IMAGE}:${DOCKER_IMAGE_TAG} .
docker push ${DOCKER_IMAGE}:${DOCKER_IMAGE_TAG}
- | # Helm
echo "[INFO] --- Helm Build (${CM_HOST})"
export DOCKER_IMAGE="$(echo $DR_HOST | cut -d":" -f1)/${CI_COMMIT_REF_SLUG}/${APPLICATION_NAME}"
curl -I ${CM_HOST}
helm repo add cm ${CM_HOST}
[[ -f ./helm/values.yaml.tpl ]] || exit 1
cd ./helm
envsubst '${APPLICATION_NAME} ${INGRESS_HOST} ${INGRESS_TYPE} ${DOCKER_IMAGE_TAG}' < ./Chart.yaml.tpl > ./Chart.yaml && rm -f ./Chart.yaml.tpl
envsubst '${APPLICATION_NAME} ${INGRESS_HOST} ${INGRESS_TYPE} ${INGRESS_TARGET} ${INGRESS_WHITELIST_SOURCE_RANGE} ${DNS_CF_PROXIED} ${DOCKER_IMAGE} ${DOCKER_IMAGE_TAG} ${ENV}' < values.yaml.tpl > ./values.yaml && rm -f ./values.yaml.tpl
helm lint && helm cm-push . cm
allow_failure: false
ampr-build-dev:
environment:
name: development
extends: .ampr-build
only:
- develop
- /^tst[0-9]+$/
# ampr-build-stg:
# environment:
# name: staging
# extends: .ampr-build
# only:
# - staging
ampr-build-prod:
environment:
name: production
extends: .ampr-build
only:
- main
# === DEPLOY ===
.ampr-deploy:
stage: ampr-deploy
variables:
DOCKER_DRIVER: overlay2
XDG_CACHE_HOME: /cache
<<: *before_script_template
script:
- | # if Production
echo "[INFO] --- env check"
[[ $ENV == "production" ]] && echo "$(cat /opt/ips) $(echo $ARGO_HOST | cut -d":" -f1)" | tee -a /etc/hosts
- | # ArgoCD
echo "[INFO] --- Deploy App"
echo "[INFO] - argocd - login" && /usr/bin/argocd login ${ARGO_HOST} --username ${ARGO_USER} --password ${ARGO_PASS} --grpc-web --insecure
echo "[INFO] - argocd - status" && /usr/bin/argocd app wait ${APPLICATION_NAME} --operation --insecure
echo "[INFO] - argocd - change" && /usr/bin/argocd app set ${APPLICATION_NAME} --revision ${DOCKER_IMAGE_TAG} --insecure
echo "[INFO] - argocd - sync" && /usr/bin/argocd app sync ${APPLICATION_NAME} --revision ${DOCKER_IMAGE_TAG} --insecure
echo "[INFO] - argocd - wait" && /usr/bin/argocd app wait ${APPLICATION_NAME} --health --timeout 600 --insecure
when: manual
ampr-deploy-dev:
environment:
name: development
extends: .ampr-deploy
only:
- develop
- /^tst[0-9]+$/
# ampr-deploy-stg:
# environment:
# name: staging
# extends: .ampr-deploy
# only:
# - staging
ampr-deploy-prod:
environment:
name: production
extends: .ampr-deploy
only:
- main