-
Notifications
You must be signed in to change notification settings - Fork 2
/
.gitlab-ci.yml
110 lines (100 loc) · 2.86 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
---
stages:
- pre-test
- test
- deploy-beta
- deploy-production
image: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
# Disable the Gradle daemon for Continuous Integration servers as correctness
# is usually a priority over speed in CI environments. Using a fresh
# runtime for each build is more reliable since the runtime is completely
# isolated from any previous builds.
variables:
POSTGRES_HOST_AUTH_METHOD: trust
APP_NAME: rare-basket
build-docker:
stage: pre-test
tags:
- openstack
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
script:
- mkdir -p /kaniko/.docker
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"auth\":\"$(echo -n ${CI_REGISTRY_USER}:${CI_REGISTRY_PASSWORD} | base64)\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor --cache --cache-copy-layers --context $CI_PROJECT_DIR --destination ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG}
allow_failure: true
test:
stage: test
services:
- name: postgres:16.3-alpine
alias: postgres
tags:
- openstack
script:
# create the test db before running the tests
- psql -h postgres -U postgres -f backend/database/setup/setup.sql
- ./gradlew check build --no-daemon --parallel
artifacts:
paths:
- backend/build/libs/rare-basket.jar
expire_in: 1 month
allow_failure: false
.deploy-to-vm: &deploy-to-vm
tags:
- openstack
retry: 1
script:
# SSH initialization
- eval $(ssh-agent -s)
- ssh-add <(echo "${SSH_PRIVATE_KEY}")
- ssh -o StrictHostKeyChecking=no ${SERVER_USER}@${SERVER_IP} 'echo "Successfully connected on $(hostname)"'
# Copy jar to the server
- scp ./backend/build/libs/${APP_NAME}.jar ${SERVER_USER}@${SERVER_IP}:/tmp/${APP_NAME}-${ENV}.jar
- ssh ${SERVER_USER}@${SERVER_IP} "sudo mv /tmp/${APP_NAME}-${ENV}.jar /opt/bootapp/${APP_NAME}-${ENV}.jar ; sudo chown -R bootapp:bootapp /opt/bootapp/"
# Restarting service with the updated jar and the according Spring profiles enabled
- ssh ${SERVER_USER}@${SERVER_IP} "sudo systemctl restart bootapp@${APP_NAME}-${ENV}"
- eval $(ssh-agent -k)
- echo "Deploy done. Application should be available at http://${SERVER_IP}:${APP_PORT}/${APP_NAME}"
.variables-beta: &variables-beta
variables:
ENV: beta
APP_PORT: ${PORT_BETA}
SERVER_IP: ${SERVER_IP_DEV}
.variables-prod: &variables-prod
variables:
ENV: prod
APP_PORT: ${PORT_PROD}
SERVER_IP: ${SERVER_IP_PROD}
deploy-to-beta:
stage: deploy-beta
tags:
- openstack
<<: *variables-beta
<<: *deploy-to-vm
only:
changes:
- backend/src/**/*
- frontend/**/*
- .gitlab-ci.yml
refs:
- branches
except:
refs:
- master
allow_failure: false # mandatory to block the execution of the pipeline
deploy-to-prod:
stage: deploy-production
tags:
- openstack
<<: *variables-prod
<<: *deploy-to-vm
only:
changes:
- backend/src/**/*
- frontend/**/*
- .gitlab-ci.yml
refs:
- master
when: manual
allow_failure: false