forked from cytomine/Cytomine-core-spring
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path.gitlab-ci.yml
120 lines (104 loc) · 3.72 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
stages:
- prepare
- test
- build
variables:
DOCKER_IMAGE_NAME: 'cytomine/core'
ENTRYPOINT_SCRIPTS_VERSION: '1.3.0'
GRADLE_VERSION: '7.2-jdk17-alpine'
OPENJDK_VERSION: '17-slim-bullseye'
default:
tags:
- docker
make-version-name:
stage: prepare
# regex check does not work with /bin/sh because of parenthesis so we need /bin/bash here
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/bash:5.2.15-alpine3.16
script:
- | # If no tag has been pushed ($CI_COMMIT_TAG is empty), name it as SNAPSHOT
if [ -z $CI_COMMIT_TAG ]; then
echo "CM_VERSION=$CI_COMMIT_BRANCH" > .env
else
# Else use the tag
echo "CM_VERSION=$CI_COMMIT_TAG" > .env
fi
- cat .env
artifacts:
reports:
dotenv: .env
lint-dockerfiles:
stage: test
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/hadolint/hadolint:latest-alpine
# Uncomment to silent some warnings if needed
#variables:
# HADOLINT_OPT: --ignore DL3008
script:
- hadolint ${HADOLINT_OPT} docker/Dockerfile
rules:
- changes:
- docker/Dockerfile
when: always
# If the Dockerfile has not been changed, this job can be skipped
- when: never
allow_failure: true
run-junit:
stage: test
image: gradle:7.4.2-jdk17-alpine
services:
- alias: postgres
name: cytomine/postgis:${POSTGIS_VERSION}
- alias: mongodb
name: mongo:4.4.18-focal
- alias: rabbitmq
name: rabbitmq:3.10
variables:
GRADLE_USER_HOME: /cache/.gradle
POSTGRES_USER: docker
POSTGRES_PASSWORD: docker
POSTGRES_DB: docker
POSTGIS_VERSION: "15-3.3-alpine-1.2.0"
MONGO_INITDB_ROOT_USERNAME: mongoadmin
MONGO_INITDB_ROOT_PASSWORD: secret
MONGO_INITDB_DATABASE: cytomine
script:
- export GRADLE_USER_HOME=$GRADLE_USER_HOME
- sed -i -- "s/localhost:5432/postgres:5432/g" src/test/resources/application.yml
- "sed -i -- 's/host: localhost/host: mongodb/g' src/test/resources/application.yml"
# test log too large for gitlab if executed at 'debug' log level
- sed -i -- "s/name=\"be.cytomine\" level=\"debug\"/name=\"be.cytomine\" level=\"info\"/g" src/test/resources/logback-test.xml
- gradle :test --no-daemon
artifacts:
reports:
junit: build/test-results/test/**/TEST-*.xml
# TODO integrate code coverage
build-push-docker-image:
stage: build
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/docker:latest
needs:
- job: make-version-name
artifacts: true
rules:
- if: $CI_COMMIT_TAG
script:
- echo "Log in to Gitlab docker registry"
- mkdir -p ~/.docker
- echo ${DOCKER_AUTH_CONFIG} > ~/.docker/config.json
- echo "Build the docker image ${DOCKER_IMAGE_NAME}:${CM_VERSION}"
- |
docker build \
--build-arg CORE_VERSION=${CM_VERSION} \
--build-arg CORE_REVISION=${CI_COMMIT_SHORT_SHA} \
--build-arg ENTRYPOINT_SCRIPTS_VERSION=${ENTRYPOINT_SCRIPTS_VERSION} \
--build-arg GRADLE_VERSION=${GRADLE_VERSION} \
--build-arg OPENJDK_VERSION=${OPENJDK_VERSION} \
-t ${DOCKER_IMAGE_NAME}:${CM_VERSION} \
-t ${DOCKER_IMAGE_NAME}:latest \
-f docker/Dockerfile \
.
# Use credential helper (see https://docs.docker.com/engine/reference/commandline/login/#credentials-store)
- mkdir -p $HOME/.docker && echo $DOCKER_HUB_AUTH_CONFIG > $HOME/.docker/config.json
- echo "Registry credentials configured at $HOME/.docker/config.json"
- echo "Pushing docker image ${DOCKER_IMAGE_NAME}:${CM_VERSION} and ${DOCKER_IMAGE_NAME}:latest"
- docker push ${DOCKER_IMAGE_NAME}:${CM_VERSION}
- docker push ${DOCKER_IMAGE_NAME}:latest
- echo "Successfully pushed docker image ${DOCKER_IMAGE_NAME}:${CM_VERSION} and ${DOCKER_IMAGE_NAME}:latest"