-
Notifications
You must be signed in to change notification settings - Fork 6
/
.gitlab-ci.yml
131 lines (116 loc) · 4.05 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
---
image: python:3.11-bullseye
stages:
- build image
- analysis and tests
- ci-pipeline
- mirroring
variables:
PRIVATE_IMAGE: $CI_DOCKER_REPOSITORY_PRIVATE/pebbles
PUBLIC_IMAGE: $CI_DOCKER_REPOSITORY_PUBLIC/pebbles
PUBLISH_IMAGE: $CI_DOCKER_REPOSITORY_PUBLISH/pebbles
GITHUB_MIRROR: [email protected]:CSCfi/pebbles.git
flake8:
stage: analysis and tests
needs: []
script:
- pip install flake8
- flake8 pebbles tests manage.py
pylint:
stage: analysis and tests
needs: []
# cache pip downloads and installed packages
variables:
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
cache:
key: "${CI_COMMIT_REF_SLUG}"
paths:
- .cache/pip
- venv/
script:
- pip install -r requirements.txt
- pip install pylint
- "pylint -j0 pebbles || true" # no failures ATM
tests:
stage: analysis and tests
needs: []
# cache pip downloads and installed packages
variables:
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
FLASK_APP: pebbles.server:app
cache:
key: "${CI_COMMIT_REF_SLUG}"
paths:
- .cache/pip
- venv/
script:
- pip install -r requirements.txt
- python manage.py test
build-image:
stage: build image
needs: []
image: docker:git
script:
- echo "Going to build and push ${PRIVATE_IMAGE}:${CI_COMMIT_REF_NAME}"
- docker build --tag ${PRIVATE_IMAGE}:${CI_COMMIT_REF_NAME} . --file=deployment/pebbles.Dockerfile
- docker push ${PRIVATE_IMAGE}:${CI_COMMIT_REF_NAME}
# push to public registry
- docker tag ${PRIVATE_IMAGE}:${CI_COMMIT_REF_NAME} ${PUBLIC_IMAGE}:${CI_COMMIT_REF_NAME}
- docker push ${PUBLIC_IMAGE}:${CI_COMMIT_REF_NAME}
# if we are on master branch, create master and versioned tags and also push to PUBLISH repo
- |
if [[ ${CI_COMMIT_REF_NAME} == 'master' ]]; then
echo "Tagging and publishing ${PRIVATE_IMAGE}:${CI_COMMIT_REF_NAME}:master"
docker tag ${PRIVATE_IMAGE}:${CI_COMMIT_REF_NAME} ${PRIVATE_IMAGE}:master
docker push ${PRIVATE_IMAGE}:master
# push to PUBLIC registry
docker tag ${PRIVATE_IMAGE}:${CI_COMMIT_REF_NAME} ${PUBLIC_IMAGE}:master
docker push ${PUBLIC_IMAGE}:master
# push to PUBLISH registry
docker tag ${PRIVATE_IMAGE}:${CI_COMMIT_REF_NAME} ${PUBLISH_IMAGE}:master
docker push ${PUBLISH_IMAGE}:master
docker tag ${PRIVATE_IMAGE}:${CI_COMMIT_REF_NAME} ${PUBLISH_IMAGE}:latest
docker push ${PUBLISH_IMAGE}:latest
export IMAGE_TAG="${CI_COMMIT_REF_NAME}-$(date +%Y-%m-%d_%H%M)"
echo "Tagging and publishing ${PRIVATE_IMAGE}:${IMAGE_TAG}"
docker tag ${PRIVATE_IMAGE}:${CI_COMMIT_REF_NAME} ${PRIVATE_IMAGE}:${IMAGE_TAG}
docker push ${PRIVATE_IMAGE}:${IMAGE_TAG}
# push to PUBLIC registry
docker tag ${PRIVATE_IMAGE}:${CI_COMMIT_REF_NAME} ${PUBLIC_IMAGE}:${IMAGE_TAG}
docker push ${PUBLIC_IMAGE}:${IMAGE_TAG}
# push to PUBLISH registry
docker tag ${PRIVATE_IMAGE}:${CI_COMMIT_REF_NAME} ${PUBLISH_IMAGE}:${IMAGE_TAG}
docker push ${PUBLISH_IMAGE}:${IMAGE_TAG}
fi
# call pipeline project
ci-pipeline:
stage: ci-pipeline
needs: ['build-image']
variables:
ENV_NAME: "${CI_ENV_NAME}"
DEPROVISION_ENVIRONMENT: 1
PEBBLES_IMAGE_TAG: "${CI_COMMIT_REF_NAME}"
PEBBLES_COMMIT_REF_NAME: "${CI_COMMIT_REF_NAME}"
PEBBLES_ENVIRONMENTS_COMMIT_REF_NAME: "${CI_COMMIT_REF_NAME}"
PEBBLES_DEPLOY_COMMIT_REF_NAME: "${CI_COMMIT_REF_NAME}"
ENV_NAME_QA: "${CI_ENV_NAME_QA}"
trigger:
project: pebbles/cicd-pipeline
branch: master
strategy: depend
mirroring:
stage: mirroring
script:
- mkdir mirror_dir
- cd mirror_dir
- echo "cloning the gitlab.ci repo"
- git clone $CI_REPOSITORY_URL pebbles
- cd pebbles
- echo "pushing to github repo"
- git checkout master
- mkdir ~/.ssh
- echo -e "Host github.com\n StrictHostKeyChecking no\n" >> ~/.ssh/config
- eval `ssh-agent -s`
- ssh-agent bash -c 'ssh-add /root/ssh/pebbles-key/id_rsa; git push $GITHUB_MIRROR master'
rules:
- if: '$CI_COMMIT_REF_NAME == "master"'