stages: - test - build - deploy - analyze # CI variables scopées: # - NPM_REGISTRY: URL du NPM registry à utiliser (default: https://npm-8ee.hidora.com/) Test: stage: test coverage: /All\sfiles.*?\s+(\d+.\d+)/ image: node:current-alpine3.12 only: - merge_requests - master script: - npm set registry ${NPM_REGISTRY:-https://npm-8ee.hidora.com/} - apk add --no-cache python3 - cd app - npm i - npm run lint # - npm run test cache: key: "$CI_COMMIT_REF_SLUG" paths: - node_modules/ - ~/.npm Build: stage: build image: docker:stable-git rules: - if: '$CI_COMMIT_REF_NAME == "master"' script: - docker login $CI_REGISTRY -u $CI_REGISTRY_USER -p$CI_REGISTRY_PASSWORD - docker pull $CI_REGISTRY_IMAGE:latest || true - docker build --cache-from $CI_REGISTRY_IMAGE:latest -t $CI_REGISTRY_IMAGE:${CI_COMMIT_TAG:-$CI_COMMIT_SHORT_SHA} ${DIRECTORY:-.} - docker push $CI_REGISTRY_IMAGE:${CI_COMMIT_TAG:-$CI_COMMIT_SHORT_SHA} - docker tag $CI_REGISTRY_IMAGE:${CI_COMMIT_TAG:-$CI_COMMIT_SHORT_SHA} $CI_REGISTRY_IMAGE:latest - docker push $CI_REGISTRY_IMAGE:latest .deploy: stage: deploy image: git.octree.ch:4567/o/infra/templates/ci/kubectl variables: HELM_EXPERIMENTAL_OCI: 1 script: - helm registry login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - helm chart pull git.octree.ch:4567/o/charts/strapi:$STRAPI_CHART_VERSION - helm chart export git.octree.ch:4567/o/charts/strapi:$STRAPI_CHART_VERSION -d charts - >- helm upgrade --install --create-namespace $CI_PROJECT_NAME charts/* -n $ENV_NAMESPACE --cleanup-on-fail --set strapi.image=$CI_REGISTRY_IMAGE:${CI_COMMIT_TAG:-$CI_COMMIT_SHORT_SHA} --set strapi.host=$CI_ENVIRONMENT_URL -f "$ENV_CONFIG" # CI variables: # - STRAPI_CHART_VERSION: Version du chart Strapi à utiliser # - ENV_CONFIG [scopée]: Fichier de configuration values.yaml (requis) Deploy to Test: extends: .deploy environment: name: test url: "https://$CI_PROJECT_NAME.dev.octr.ee" rules: - if: '$CI_COMMIT_REF_NAME == "master"' variables: ENV_NAMESPACE: $CI_PROJECT_NAME-$CI_ENVIRONMENT_SLUG # CI variables: # - STRAPI_CHART_VERSION: Version du chart Strapi à utiliser # - ENV_URL [scopée]: URL de l'environnement (requis) # - ENV_CONFIG [scopée]: Fichier de configuration values.yaml (requis) # - ENV_NAMESPACE [scopée]: Namespace Kubernetes (default: default) Deploy to Staging: extends: .deploy environment: name: staging url: $ENV_URL rules: - if: "$CI_COMMIT_TAG =~ /v.*-rc$/" # CI variables: # - STRAPI_CHART_VERSION: Version du chart Strapi à utiliser # - ENV_URL [scopée]: URL de l'environnement (requis) # - ENV_CONFIG [scopée]: Fichier de configuration values.yaml (requis) # - ENV_NAMESPACE [scopée]: Namespace Kubernetes (default: default) Deploy to Production: extends: .deploy environment: name: production url: $ENV_URL rules: - if: "$CI_COMMIT_TAG =~ /v.*[^r][^c]$/" when: manual # CI variables: # - SONAR_URL: URL de SonarQube (requis) # - SONAR_LOGIN: Login pour SonarQube (requis) # - SONAR_SOURCE: Dossier à scanner (default: .) Code Quality: stage: analyze image: ciricihq/gitlab-sonar-scanner rules: - if: '$CI_PIPELINE_SOURCE =~ "schedule"' script: - >- sonar-scanner -Dsonar.host.url=$SONAR_URL -Dsonar.projectKey=$CI_PROJECT_NAME-$CI_ENVIRONMENT_SLUG -Dsonar.login=$SONAR_LOGIN -Dsonar.sources=${SONAR_SOURCE:-.}