.gitlab-ci.yml (view raw)
1stages:
2 - test
3 - build
4 - deploy
5 - analyze
6
7# CI variables scopées:
8# - NPM_REGISTRY: URL du NPM registry à utiliser (default: https://npm-8ee.hidora.com/)
9Test:
10 stage: test
11 coverage: /All\sfiles.*?\s+(\d+.\d+)/
12 image: node:current-alpine3.12
13 only:
14 - merge_requests
15 - master
16 script:
17 - npm set registry ${NPM_REGISTRY:-https://npm-8ee.hidora.com/}
18 - apk add --no-cache python3
19 - cd app
20 - npm i
21 - npm run lint
22 # - npm run test
23 cache:
24 key: "$CI_COMMIT_REF_SLUG"
25 paths:
26 - node_modules/
27 - ~/.npm
28
29Build:
30 stage: build
31 image: docker:stable-git
32 rules:
33 - if: '$CI_COMMIT_REF_NAME == "master"'
34 script:
35 - docker login $CI_REGISTRY -u $CI_REGISTRY_USER -p$CI_REGISTRY_PASSWORD
36 - docker pull $CI_REGISTRY_IMAGE:latest || true
37 - docker build --cache-from $CI_REGISTRY_IMAGE:latest -t $CI_REGISTRY_IMAGE:${CI_COMMIT_TAG:-$CI_COMMIT_SHORT_SHA} ${DIRECTORY:-.}
38 - docker push $CI_REGISTRY_IMAGE:${CI_COMMIT_TAG:-$CI_COMMIT_SHORT_SHA}
39 - docker tag $CI_REGISTRY_IMAGE:${CI_COMMIT_TAG:-$CI_COMMIT_SHORT_SHA} $CI_REGISTRY_IMAGE:latest
40 - docker push $CI_REGISTRY_IMAGE:latest
41
42.deploy:
43 stage: deploy
44 image: git.octree.ch:4567/o/infra/templates/ci/kubectl
45 variables:
46 HELM_EXPERIMENTAL_OCI: 1
47 script:
48 - helm registry login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
49 - helm chart pull git.octree.ch:4567/o/charts/strapi:$STRAPI_CHART_VERSION
50 - helm chart export git.octree.ch:4567/o/charts/strapi:$STRAPI_CHART_VERSION -d charts
51 - >-
52 helm upgrade --install --create-namespace $CI_PROJECT_NAME charts/*
53 -n $ENV_NAMESPACE --cleanup-on-fail
54 --set strapi.image=$CI_REGISTRY_IMAGE:${CI_COMMIT_TAG:-$CI_COMMIT_SHORT_SHA}
55 --set strapi.host=$CI_ENVIRONMENT_URL
56 -f "$ENV_CONFIG"
57
58# CI variables:
59# - STRAPI_CHART_VERSION: Version du chart Strapi à utiliser
60# - ENV_CONFIG [scopée]: Fichier de configuration values.yaml (requis)
61Deploy to Test:
62 extends: .deploy
63 environment:
64 name: test
65 url: "https://$CI_PROJECT_NAME.dev.octr.ee"
66 rules:
67 - if: '$CI_COMMIT_REF_NAME == "master"'
68 variables:
69 ENV_NAMESPACE: $CI_PROJECT_NAME-$CI_ENVIRONMENT_SLUG
70
71# CI variables:
72# - STRAPI_CHART_VERSION: Version du chart Strapi à utiliser
73# - ENV_URL [scopée]: URL de l'environnement (requis)
74# - ENV_CONFIG [scopée]: Fichier de configuration values.yaml (requis)
75# - ENV_NAMESPACE [scopée]: Namespace Kubernetes (default: default)
76Deploy to Staging:
77 extends: .deploy
78 environment:
79 name: staging
80 url: $ENV_URL
81 rules:
82 - if: "$CI_COMMIT_TAG =~ /v.*-rc$/"
83
84# CI variables:
85# - STRAPI_CHART_VERSION: Version du chart Strapi à utiliser
86# - ENV_URL [scopée]: URL de l'environnement (requis)
87# - ENV_CONFIG [scopée]: Fichier de configuration values.yaml (requis)
88# - ENV_NAMESPACE [scopée]: Namespace Kubernetes (default: default)
89Deploy to Production:
90 extends: .deploy
91 environment:
92 name: production
93 url: $ENV_URL
94 rules:
95 - if: "$CI_COMMIT_TAG =~ /v.*[^r][^c]$/"
96 when: manual
97
98# CI variables:
99# - SONAR_URL: URL de SonarQube (requis)
100# - SONAR_LOGIN: Login pour SonarQube (requis)
101# - SONAR_SOURCE: Dossier à scanner (default: .)
102Code Quality:
103 stage: analyze
104 image: ciricihq/gitlab-sonar-scanner
105 rules:
106 - if: '$CI_PIPELINE_SOURCE =~ "schedule"'
107 script:
108 - >-
109 sonar-scanner -Dsonar.host.url=$SONAR_URL
110 -Dsonar.projectKey=$CI_PROJECT_NAME-$CI_ENVIRONMENT_SLUG
111 -Dsonar.login=$SONAR_LOGIN -Dsonar.sources=${SONAR_SOURCE:-.}