-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy path.gitlab-ci.yml
138 lines (125 loc) · 3.77 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
# we only need a build stage
stages:
- build
image: docker:19.03.12
services:
- docker:19.03.12-dind
variables:
PUSH_DOCKER: "False"
PUSH_GITLAB: "True"
PUSH_TEST_IMAGES: "False"
ENVSUBST_DOCKERFILE: "False"
# template (hidden job) for the 'real' build and push jobs to extend
.build_and_push:
stage: build
script:
- build
- push_local
- push_docker
variables:
ONLY_PUSH_ON_BRANCH: master
WHEN_TO_RUN: "daily"
only:
refs:
- branches
# variables:
# - $SCHEDULE_RUN == $WHEN_TO_RUN
# 'real' jobs
gvmd:
extends: .build_and_push
variables:
IMAGE_TYPE: gvmd
IMAGE_NAME: gvmd
TAGS: 20.8.1 latest
gsad:
extends: .build_and_push
variables:
IMAGE_TYPE: gsad
IMAGE_NAME: gsad
TAGS: 20.8.1 latest
gvm-postgres:
extends: .build_and_push
variables:
IMAGE_TYPE: gvm-postgres
IMAGE_NAME: gvm-postgres
TAGS: 12 latest
openvas:
extends: .build_and_push
variables:
IMAGE_TYPE: openvas
IMAGE_NAME: openvas
TAGS: 20.8.1 latest
# build and push functions used by jobs
.functions: &functions |
function build() {
if [ "${ENVSUBST_DOCKERFILE}" == "True" ]; then
apk update
apk add gettext # for envsubst command
echo "Building ${IMAGE_TYPE} with envsubst of Dockerfile"
envsubst < "./${IMAGE_TYPE}/Dockerfile" | \
docker build -t "${IMAGE_TYPE}" -f - "${IMAGE_TYPE}"
elif [ ! -z "${BUILD_ARGS}" ]; then
for a in ${BUILD_ARGS}
do
ARG_LIST="${ARG_LIST}--build-arg $a "
done
echo "Building ${IMAGE_TYPE} with '${ARG_LIST}'"
docker build -t "${IMAGE_TYPE}" ${ARG_LIST} "${IMAGE_TYPE}"
else
echo "Building ${IMAGE_TYPE}"
docker build -t "${IMAGE_TYPE}" "${IMAGE_TYPE}"
fi
}
function push_local() {
if [ "${PUSH_GITLAB}" == "True" ]; then
IMAGE_FOLDER=${CI_REGISTRY_IMAGE}
if [ "${CI_COMMIT_REF_NAME}" != "${ONLY_PUSH_ON_BRANCH}" ]; then
# If the PUSH_TEST_IMAGES variable is set, push images to a test sub-folder
# in the image registry.
if [ ! -z "${PUSH_TEST_IMAGES}" ]; then
echo "Branch '${CI_COMMIT_REF_NAME}' is not '${ONLY_PUSH_ON_BRANCH}' so pushing to 'test'."
IMAGE_FOLDER=${IMAGE_FOLDER}/test
else
echo "Not pushing: Branch '${CI_COMMIT_REF_NAME}' is not '${ONLY_PUSH_ON_BRANCH}'"
IMAGE_FOLDER=
fi
fi
if [ ! -z "${IMAGE_FOLDER}" ]; then
echo "Registry login with ${CI_REGISTRY_USER}"
docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
for tag in ${TAGS}; do
IMAGE_TAG=${IMAGE_FOLDER}/${IMAGE_NAME}:${tag}
echo "Tagging image ${IMAGE_TAG}"
docker tag "${IMAGE_TYPE}" "${IMAGE_TAG}"
docker push "${IMAGE_TAG}"
done
fi
else
echo "Not pushing: GitLab pushes are disabled for this build"
fi
}
function push_docker() {
if [ "${PUSH_DOCKER}" == "True" ]; then
if [ "${CI_COMMIT_REF_NAME}" == "${ONLY_PUSH_ON_BRANCH}" ]; then
if [ ! -z "${DOCKER_USER}" ] && [ ! -z "${DOCKER_PASS}" ]; then
echo "Docker Hub login"
docker login -u "$DOCKER_USER" -p "$DOCKER_PASS"
for tag in ${TAGS}; do
IMAGE_TAG=${DOCKER_ORG}/${IMAGE_NAME}:${tag}
echo "Tagging image ${IMAGE_TAG}"
docker tag "${IMAGE_TYPE}" "${IMAGE_TAG}"
docker push "${IMAGE_TAG}"
done
else
echo "Not pushing: no DOCKER_USER and DOCKER_PASS variables"
fi
else
echo "Not pushing: branch '${CI_COMMIT_REF_NAME}' is not '${ONLY_PUSH_ON_BRANCH}'."
fi
else
echo "Not pushing: Docker hub pushes are disabled for this build"
fi
}
# load functions before jobs start
before_script:
- *functions