-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.gitlab-ci.yml
176 lines (168 loc) · 7.35 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
# Workflow permettant de déclencher le pipeline uniquement par schedule sur la branche master/main
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_PIPELINE_SOURCE == "web"
- if: $CI_PIPELINE_SOURCE == "schedule"
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
when: never
- if: $CI_COMMIT_BRANCH
stages:
- init
# Default configuration for all jobs
default:
tags:
- Usine_Logicielle
timeout: 30 minutes
# Définition des variables globales pour tous les jobs
#============================
variables:
#============================
# Variables globales déclarées en dehors du yaml, définies automatiquement par Gitlab (Liste non exhaustive. Voir https://docs.gitlab.com/ee/ci/pipelines/index.html#prefill-variables-in-manual-pipelines)
#============================
# CI_PIPELINE_SOURCE
# CI_COMMIT_BRANCH
# CI_OPEN_MERGE_REQUESTS
# CI_MERGE_REQUEST_IID
# CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
# CI_MERGE_REQUEST_TARGET_BRANCH_NAME
# CI_PROJECT_PATH
# CI_COMMIT_REF_SLUG
# CI_PIPELINE_ID
# CI_PIPELINE_URL
# CI
# TRIGGER_PAYLOAD
# …
#============================
# Variables globales déclarées en dehors du yaml, définies par l'UL au niveau de l’instance Gitlab
#============================
# CNES_CERTIFICATE
# JAVA_HOME
#============================
# Variables globales déclarées en dehors du yaml, définies par l'UL, au niveau du groupe Gitlab dans le menu "Settings > CI/CD > Variables", et héritées par le projet :
#============================
# Pour les images Docker sur Artifactory :
# DOCKER_AUTH_CONFIG
# Pour la connexion à Artifactory :
# ARTIFACTORY_HOST
# ARTIFACTORY_USER
# ARTIFACTORY_TOKEN
# Pour la connexion à SonarQube :
# DIDIER_SONAR_TOKEN ==> SONAR_TOKEN
# SONARQUBE_HOST
# Pour les connexions par proxy :
# NO_PROXY
# PROXY_URL
# PROXY_USER
# PROXY_PWD
# …
#============================
# Variables globales déclarées dans le yaml, constituant des "paramètres" pour les jobs manuels :
#============================
DEBUG:
value: 'false'
description: "Afficher des logs supplémentaires"
#============================
# Autres variables globales déclarées dans le yaml :
#============================
# Variables pour les tags des images Docker à utiliser pour les jobs
#---------------------------
TAG_IMAGE_CONDA: "continuumio/miniconda3:23.5.2-0"
TAG_IMAGE_SONAR: "sonarsource/sonar-scanner-cli:4.5"
#---------------------------
# Variables pour le client Command Line Interface "JFrog CLI" (voir https://www.jfrog.com/confluence/display/CLI/JFrog+CLI)
#---------------------------
# CI : [Default: false] If true, disables interactive prompts and progress bar.
CI: "true"
HOME: "${WORKSPACE}"
# JFROG_CLI_HOME_DIR : [Default: ~/.jfrog]. Définit le chemin du fichier de configuration de Jfrog CLI.
JFROG_CLI_HOME_DIR: ".jfrog/"
# JFROG_CLI_TEMP_DIR: [Default: /tmp] Obligatoire, sinon les fichiers temporaires ne sont pas disponibles dans les autres jobs et le build-info.json n'est pas complet.
# JFROG_CLI_TEMP_DIR: ".jfrog_tmp". Non utilisé dans cet exemple.
# Version de Jfrog CLI et l'OS de la machine (sur Gitlab-CI de l'UL c'est amd64)
JFROG_VERSION: "v2/2.14.0"
JFROG_OS: "jfrog-cli-linux-amd64"
JFROG_CLI_VERSION: "jfrog-cli/1.53.1"
#---------------------------
# Variables pour les applications JFrog, Artifactory, les artefacts, etc
#---------------------------
# Couple de variable pour construire le chemin des builds infos dans Artifactory. Ce couple doit être unique
JFROG_CLI_BUILD_NAME: "${CI_PROJECT_PATH}_${CI_COMMIT_REF_SLUG}_gitlab-ci"
JFROG_CLI_BUILD_NUMBER: "${CI_PIPELINE_ID}"
# url générique du serveur contenant les images docker
ARTIFACTORY_URL: "${ARTIFACTORY_HOST}/docker"
ARTIFACTORY_BUILD_URL: "https://${artifactory_host}/artifactory/webapp/#/builds/${JFROG_CLI_BUILD_NAME}/${JFROG_CLI_BUILD_NUMBER}"
# URL pour récupérer l'image Docker pour exécuter l'analyse décrite dans le template SAST
CI_TEMPLATE_REGISTRY_HOST: "${ARTIFACTORY_HOST}/gitlab-docker-remote"
#---------------------------
# Variables pour les applications SonarQube, SonarScanner, etc, propres au projet
#---------------------------
SONAR_SCANNER_VERSION: "sonar-scanner/4.6.2"
#============================
# Variables pour le développement de l'application
#============================
# PIP
#---------------------------
# Necessaire pour le virtual env pour ne pas partir en timeout car internet n'est pas configure
PIP_INDEX_URL: "https://${ARTIFACTORY_USER}:${ARTIFACTORY_TOKEN}@${ARTIFACTORY_HOST}/artifactory/api/pypi/pypi/simple"
PIP_CERT: "${CNES_CERTIFICATE}"
# Variable pour deplacer le dossier de cache de pip dans le workspace
PIP_CACHE_DIR: "${WORKSPACE}/.pip-cache/"
#---------------------------
# CONDA
#---------------------------
CONDA_VERSION: "conda/4.9.0"
# Configuration conda pour les channels. Permet d'indiquer à Conda où récupérer ses dépendances.
CONDA_CHANNEL_PRIORITY: "strict"
CONDA_CHANNEL_ALIAS: "https://${ARTIFACTORY_USER}:${ARTIFACTORY_TOKEN}@${ARTIFACTORY_HOST}/artifactory/api/conda/"
CONDA_CHANNELS: "conda-forge-remote,conda-main-remote"
CONDA_ENVS_DIRS: ".conda/envs"
#---------------------------
# CERTIFICATS SSL
#---------------------------
# On indique à la fois à pip et à conda les certificats CNES à utiliser.
CONDA_SSL_VERIFY: "${CNES_CERTIFICATE}"
PIP_SSL_VERIFY: "${CNES_CERTIFICATE}"
REQUESTS_CA_BUNDLE: "${CNES_CERTIFICATE}"
build-env:
stage: init
image: ${ARTIFACTORY_URL}/${TAG_IMAGE_CONDA}
before_script:
# Création de l'environnement virtuel conda
- mkdir -p ${CONDA_ENVS_DIRS}
- conda env create -f environment.yml
# Activation de l'environnement, le nom de l'environnement est dans le fichier yaml
- source activate netcdf-streaming-env
- conda install curl
# Installation de Jfrog CLI 2.14.0 (18 mars 2022)
- curl -sS --cacert ${CNES_CERTIFICATE} -u ${ARTIFACTORY_USER}:${ARTIFACTORY_TOKEN} -O "https://${ARTIFACTORY_HOST}/artifactory/jfrog-cli-go-remote/${JFROG_VERSION}/${JFROG_OS}/jfrog"
# On donne les permissions pour utiliser la commande jfrog
- chmod 755 jfrog
# Définition d'un UUID unique
- export UUID=$(cat /proc/sys/kernel/random/uuid)
# Export de UUID pour le faire passer entre les jobs
- touch uuid.txt
- echo ${UUID} > uuid.txt
# Ajout des certificats du CNES dans jfrog CLI pour accéder à Artifactory en HTTPS
- mkdir -p "${JFROG_CLI_HOME_DIR}security/certs/"
- cp ${CNES_CERTIFICATE} "${JFROG_CLI_HOME_DIR}security/certs/"
script:
# Configuration de jfrog CLI
- ./jfrog config add ${UUID} --artifactory-url=https://${ARTIFACTORY_HOST}/artifactory --access-token=${ARTIFACTORY_TOKEN}
# Configuration du dépôt pip
- ./jfrog pip-config --server-id-resolve=${UUID} --repo-resolve=pypi
# Installation des requirements du projet
- ./jfrog rt pip-install -r requirements_dev.txt --no-cache-dir --force-reinstall
- conda deactivate
timeout: 15 minutes
artifacts:
untracked: true
expire_in: 1 day
#test-unitaire:
# stage: python-test
#
# script:
# - mkdir -p ${CONDA_ENVS_DIRS}
# - conda env create -f environment.yml
# - source activate netcdf-streaming-env
# - nosetests chunkindex/test/test_*