Forked from
anaee-dev / OpenAdom / openADOM-frontend
62 commits behind the upstream repository.
-
Rachid Yahiaoui authoredRachid Yahiaoui authored
.gitlab-ci.yml 5.74 KiB
image: docker:stable
# Pour l'utilisation de testcontainers
# https://www.testcontainers.org/supported_docker_environment/continuous_integration/gitlab_ci/
services: &dind_definition
- name: docker:dind
alias: docker
command: ['--tls=false']
variables:
OPENADOM_DOCK_REG: $CI_REGISTRY/anaee-dev/openadom/frontend
TRIGGER_PROJECT_NAME: "anaee-dev/openadom/deployment"
# Instruct Testcontainers to use the daemon of DinD.
DOCKER_HOST: tcp://docker:2375
# Improve performance with overlayfs.
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: ""
stages:
- build_env
- trigger
.before_script_template: &before_script
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- echo "Commit Short id = $CI_COMMIT_SHORT_SHA"
development:
stage: build_env
timeout: 4 hours 00 minutes
interruptible: true
tags:
- stable # Use stable runner
- docker # Use docker runner
before_script:
*before_script
script:
# $CI_COMMIT_REF_SLUG : Clean special characters and convert to lowercase with hyphens
- IMAGE_NAME="$OPENADOM_DOCK_REG:$CI_COMMIT_REF_SLUG"
- IMAGE_NAME_WITH_COMMIT_ID="$IMAGE_NAME-$CI_COMMIT_SHORT_SHA"
- echo "Docker Image Name = $IMAGE_NAME "
- echo "Docker Image Name With ID = $IMAGE_NAME_WITH_COMMIT_ID"
- echo "Building Docker image = $IMAGE_NAME"
- docker build -f docker/Dockerfile -t $IMAGE_NAME .
- echo "Pushing Docker image to registry = $IMAGE_NAME"
- docker push $IMAGE_NAME
- docker tag $IMAGE_NAME $IMAGE_NAME_WITH_COMMIT_ID
- echo "Pushing tagged Docker image to registry = $IMAGE_NAME_WITH_COMMIT_ID"
- docker push $IMAGE_NAME_WITH_COMMIT_ID
rules:
# Trigger on 'develop' branch automatically, disable for 'main' and tags, manual for others
- if: '$CI_COMMIT_REF_SLUG == "develop"'
when: on_success
- if: '$CI_COMMIT_REF_SLUG == "main" || $CI_COMMIT_TAG'
when: never
- when: manual
preprod:
stage: build_env
timeout: 4 hours 00 minutes
interruptible: true
tags:
- stable # Use stable runner
- docker # Use docker runner
before_script:
*before_script
script:
# $CI_COMMIT_REF_SLUG : Clean special characters and convert to lowercase with hyphens
- IMAGE_NAME="$OPENADOM_DOCK_REG:$CI_COMMIT_REF_SLUG"
- IMAGE_NAME_WITH_COMMIT_ID="$IMAGE_NAME-$CI_COMMIT_SHORT_SHA"
- echo "Docker Image Name = $IMAGE_NAME "
- echo "Docker Image Name With ID = $IMAGE_NAME_WITH_COMMIT_ID"
- echo "Building Docker image = $IMAGE_NAME"
- docker build -f docker/Dockerfile -t $IMAGE_NAME .
- echo "Pushing Docker image to registry = $IMAGE_NAME"
- docker push $IMAGE_NAME
- docker tag $IMAGE_NAME $IMAGE_NAME_WITH_COMMIT_ID
- echo "Pushing tagged Docker image to registry = $IMAGE_NAME_WITH_COMMIT_ID"
- docker push $IMAGE_NAME_WITH_COMMIT_ID
rules:
# Automatically trigger for 'main' branch
- if: '$CI_COMMIT_REF_SLUG == "main"'
when: on_success
- when: never
# Production-specific build job that validates
# semantic version tags and builds Docker images
# Accepted formats : <int>, <int>.<int>, or <int>.<int>.<int>
production:
stage: build_env
# Set a reasonable timeout for build process
timeout: 4 hours 00 minutes
# Prevent job from being canceled when a new pipeline starts
interruptible: false
# Runner tags required for this job
tags:
- stable # Use stable runner
- docker # Use docker runner
before_script:
*before_script
script:
- echo "Validating tag format for $CI_COMMIT_TAG"
# Check if a tag is provided
- |
if [ -n "$CI_COMMIT_TAG" ]; then
# Validate tag format with grep
if echo "$CI_COMMIT_TAG" | grep -qE "^[0-9]+(\.[0-9]+){0,2}$" && ! echo "$CI_COMMIT_TAG" | grep -q "\.$"; then
echo "Tag format is valid = $CI_COMMIT_TAG"
echo "Building Docker image : $OPENADOM_DOCK_REG:$CI_COMMIT_TAG"
docker build -f docker/Dockerfile -t $OPENADOM_DOCK_REG:$CI_COMMIT_TAG .
echo "Pushing Docker image to registry : $OPENADOM_DOCK_REG:$CI_COMMIT_TAG"
docker push $OPENADOM_DOCK_REG:$CI_COMMIT_TAG
else
echo "Invalid tag format = $CI_COMMIT_TAG"
echo "Tag must be in format : <int>, <int>.<int>, or <int>.<int>.<int>"
echo "Examples : 1, 1.0, 1.0.0"
exit 1
fi
else
echo "No tag provided"
exit 1
fi
# Run this job only for tags (not branches)
only:
- tags
deployment:
stage: trigger
rules:
- if: '$CI_COMMIT_REF_SLUG == "develop"' # Development Env
variables:
TRIGGERED_BY_PARENT: 'true'
ENV: 'development'
OA_FRONTEND_VERSION: '$CI_COMMIT_REF_SLUG' # develop branch
INIT_DB_USER: true
REMOVE_DB_AND_VOLUMES: true
when: on_success
- if: '$CI_COMMIT_REF_SLUG == "main"' # Preprod Env
variables:
TRIGGERED_BY_PARENT: 'true'
ENV: 'preprod'
OA_FRONTEND_VERSION: '$CI_COMMIT_REF_SLUG' # main branch
INIT_DB_USER: true
REMOVE_DB_AND_VOLUMES: true
when: on_success
- if: '$CI_COMMIT_TAG' # Production Env
variables:
TRIGGERED_BY_PARENT: 'true'
ENV: "production"
OA_FRONTEND_VERSION: '$CI_COMMIT_TAG'
INIT_DB_USER: false
REMOVE_DB_AND_VOLUMES: false
when: on_success
- if: '$CI_MERGE_REQUEST_IID != null' # Do nothing with merge request
when: never
- when: manual # Trigger manually if needed ( Feature Dev branch )
variables:
TRIGGERED_BY_PARENT: 'true'
ENV: "development"
OA_FRONTEND_VERSION: '$CI_COMMIT_REF_SLUG'
INIT_DB_USER: true
REMOVE_DB_AND_VOLUMES: true
trigger:
project: '$TRIGGER_PROJECT_NAME'
branch: main
strategy: depend