-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.gitlab-ci.yml
194 lines (179 loc) · 4.9 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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
variables:
GRADLE_OPTS: "-Dorg.gradle.daemon=false -Dorg.gradle.parallel=true"
GRADLE_USER_HOME: ".gradle"
image: eclipse-temurin:11-jdk
stages:
- build
- test
- package
- docker
cache:
paths:
- .gradle/wrapper
- .gradle/caches
- build
before_script:
- export GRADLE_USER_HOME=`pwd`/.gradle
- export JAVA_HOME=/home/debian/.sdkman/candidates/java/11.0.23-tem
- chmod +x ./gradlew
compile:
tags:
- jre-server
stage: build
script:
- ./gradlew assemble
artifacts:
paths:
- build/libs/*.jar
expire_in: 1 week
#test:
# tags:
# - jre-server
# stage: test
# script:
# - ./gradlew check
# allow_failure: true
test_docker_launch:
stage: test
image: docker:latest
services:
- docker:dind
variables:
# Désactiver TLS pour Docker-in-Docker en dev/test
DOCKER_TLS_CERTDIR: ""
DOCKER_HOST: tcp://docker:2375
GITLAB_TOKEN: ${CI_JOB_TOKEN}
# Image à tester
ORA_IMAGE: ${CI_REGISTRY_IMAGE}:latest
before_script:
# Création du répertoire pour les configurations de test
- mkdir -p ./test-configs/apps
- mkdir -p ./test-configs/tmp
# Création des fichiers de configuration minimaux pour le test
- |
cat > ./test-configs/envs.yml << EOF
environments:
- name: test
level: 1
EOF
- |
cat > ./test-configs/apps/test-app.yml << EOF
applications:
- name: test-app
healthUrl: http://localhost:8080/actuator/health
EOF
script:
# Login au registry GitLab
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
# Pull de l'image latest
- docker pull ${ORA_IMAGE}
# Lancement du conteneur avec les configs de test
- |
docker run -d \
--name ora-test \
-p 8080:8080 \
-v $(pwd)/test-configs:/app/config/ora \
${ORA_IMAGE}
# Attente que l'application démarre (30 secondes max)
- |
TIMEOUT=30
echo "Waiting for ORA to start (timeout ${TIMEOUT}s)..."
while [ $TIMEOUT -gt 0 ]; do
if curl -s http://docker:8080/actuator/health | grep -q "UP"; then
echo "ORA started successfully"
docker logs ora-test
exit 0
fi
TIMEOUT=$((TIMEOUT-1))
sleep 1
done
echo "Error: ORA failed to start within timeout"
docker logs ora-test
exit 1
after_script:
# Nettoyage
- docker rm -f ora-test || true
- docker logout $CI_REGISTRY
rules:
# Exécuter ce job uniquement quand l'image latest a été mise à jour
- changes:
- Dockerfile
when: always
- if: '$CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/'
when: always
allow_failure: true
package:
tags:
- jre-server
stage: package
script:
- ./gradlew bootJar
artifacts:
paths:
- build/libs/*.jar
expire_in: 1 week
only:
- main
- develop
- /^release\/.*$/
docker build:
tags:
- jre-server
stage: docker
variables:
GITLAB_TOKEN: ${CI_JOB_TOKEN}
DOCKERHUB_USERNAME: jrec
before_script:
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY
script:
- |
if [[ "$CI_COMMIT_BRANCH" == "main" ]]; then
VERSION=$(cat gradle.properties | grep "version" | cut -d'=' -f2)
DOCKER_TAG=$VERSION
else
DOCKER_TAG=$CI_COMMIT_SHA
fi
- echo "Building docker image with tag $DOCKER_TAG"
- docker build --pull --cache-from $CI_REGISTRY_IMAGE:latest
--tag $CI_REGISTRY_IMAGE:$DOCKER_TAG
--tag $CI_REGISTRY_IMAGE:latest .
- docker push $CI_REGISTRY_IMAGE:$DOCKER_TAG
- docker push $CI_REGISTRY_IMAGE:latest
only:
- main
- develop
- /^release\/.*$/
push to dockerhub:
tags:
- jre-server
stage: docker
variables:
GITLAB_TOKEN: ${CI_JOB_TOKEN}
DOCKERHUB_USERNAME: jrec
script:
- |
if [[ "$CI_COMMIT_BRANCH" == "main" ]]; then
VERSION=$(cat gradle.properties | grep "version" | cut -d'=' -f2)
DOCKER_TAG=$VERSION
else
DOCKER_TAG=$CI_COMMIT_SHA
fi
# D'abord on se connecte au registry GitLab
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" "$CI_REGISTRY" --password-stdin
- docker pull $CI_REGISTRY_IMAGE:$DOCKER_TAG
# Ensuite on se déconnecte de GitLab
- docker logout "$CI_REGISTRY"
# Puis on se connecte à DockerHub
- echo "$DOCKERHUB_PASSWORD" | docker login -u $DOCKERHUB_USERNAME --password-stdin
- echo "Pushing docker image to Docker Hub with tag $DOCKER_TAG"
- docker tag $CI_REGISTRY_IMAGE:$DOCKER_TAG $DOCKERHUB_USERNAME/ora:$DOCKER_TAG
- docker tag $CI_REGISTRY_IMAGE:$DOCKER_TAG $DOCKERHUB_USERNAME/ora:latest
- docker push $DOCKERHUB_USERNAME/ora:$DOCKER_TAG
- docker push $DOCKERHUB_USERNAME/ora:latest
# Enfin on se déconnecte de DockerHub
- docker logout
only:
- main
- develop
- /^release\/.*$/
when: manual