-
Notifications
You must be signed in to change notification settings - Fork 0
/
.gitlab-ci.yml
131 lines (122 loc) · 3.25 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
130
131
variables:
TEAM_ID: $TEAM_ID
CLUSTER_NAME: team$TEAM_ID
CLUSTER_PROFILE_NAME: team$TEAM_ID-profile
CLUSTER_CONFIG_NAME: team$TEAM_ID-config
BOOKING_IMAGE_NAME: $CI_REGISTRY_IMAGE/bookingapi
POSTGRES_IMAGE_NAME: $CI_REGISTRY_IMAGE/postgres
BASE_POSTGRES_IMAGE_NAME: registry.gitlab.com/tw-catalyst/booking/postgres
DOCKER_DRIVER: overlay2
DOCKER_HOST: tcp://docker:2375
stages:
- test
- build
- package
- deploy-integration
- promote-staging
- deploy-staging
- promote-prod
- deploy-prod
test:
image: gradle:5.3.0-jdk11
stage: test
script:
- ./gradlew test
artifacts:
expire_in: 1 week
paths:
- build
- .gradle
only:
- master
build:
image: gradle:5.3.0-jdk11
stage: build
script: ./gradlew --build-cache --info bootjar
artifacts:
expire_in: 1 week
paths:
- build
- .gradle
only:
- master
package:
image: docker:latest
stage: package
services:
- docker:dind
environment:
name: integration
script:
- export $(cat gradle.properties | grep appVersion)
- export BOOKING_IMAGE=$BOOKING_IMAGE_NAME:$CI_COMMIT_SHORT_SHA-$CI_ENVIRONMENT_SLUG
- export POSTGRES_IMAGE=$POSTGRES_IMAGE_NAME:$CI_COMMIT_SHORT_SHA-$CI_ENVIRONMENT_SLUG
- echo "image info - $BOOKING_IMAGE $POSTGRES_IMAGE"
- docker -v login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD registry.gitlab.com
- docker build -t $BOOKING_IMAGE . --no-cache --build-arg VERSION="$appVersion-$CI_COMMIT_SHORT_SHA"
- docker pull $BASE_POSTGRES_IMAGE_NAME
- docker tag $BASE_POSTGRES_IMAGE_NAME $POSTGRES_IMAGE
- docker push $BOOKING_IMAGE
- docker push $POSTGRES_IMAGE
only:
- master
deploy-integration:
image: registry.gitlab.com/gitlab-org/cloud-deploy
stage: deploy-integration
environment:
name: integration
script:
- echo "image info - $BOOKING_IMAGE_NAME $POSTGRES_IMAGE_NAME $CI_ENVIRONMENT_SLUG $CI_COMMIT_SHORT_SHA"
- ./deploy.sh $BOOKING_IMAGE_NAME $POSTGRES_IMAGE_NAME $CI_COMMIT_SHORT_SHA $CI_ENVIRONMENT_SLUG
only:
- master
promote-staging:
image: docker:latest
stage: promote-staging
when: manual
variables:
PROMOTE_FROM: integration
services:
- docker:dind
environment:
name: staging
script:
- ./promote.sh $PROMOTE_FROM
only:
- master
deploy-staging:
image: registry.gitlab.com/gitlab-org/cloud-deploy
stage: deploy-staging
environment:
name: staging
when: manual
script:
- echo "image info - $BOOKING_IMAGE_NAME $POSTGRES_IMAGE_NAME $CI_ENVIRONMENT_SLUG $CI_COMMIT_SHORT_SHA"
- ./deploy.sh $BOOKING_IMAGE_NAME $POSTGRES_IMAGE_NAME $CI_COMMIT_SHORT_SHA $CI_ENVIRONMENT_SLUG
only:
- master
promote-prod:
image: docker:latest
stage: promote-prod
when: manual
variables:
PROMOTE_FROM: staging
services:
- docker:dind
environment:
name: prod
script:
- ./promote.sh $PROMOTE_FROM
only:
- master
deploy-prod:
image: registry.gitlab.com/gitlab-org/cloud-deploy
stage: deploy-prod
environment:
name: prod
when: manual
script:
- echo "image info - $BOOKING_IMAGE_NAME $POSTGRES_IMAGE_NAME $CI_ENVIRONMENT_SLUG $CI_COMMIT_SHORT_SHA"
- ./deploy.sh $BOOKING_IMAGE_NAME $POSTGRES_IMAGE_NAME $CI_COMMIT_SHORT_SHA $CI_ENVIRONMENT_SLUG
only:
- master