stages: - build - push - deploy variables: DOCKER_DRIVER: overlay2 IMAGE_BACKEND: $CI_REGISTRY/$CI_PROJECT_PATH/backend IMAGE_FRONTEND: $CI_REGISTRY/$CI_PROJECT_PATH/frontend before_script: - echo "Logging in to GitLab Container Registry..." - echo $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER $CI_REGISTRY --password-stdin # BUILD BACKEND build-backend: stage: build script: - | if [[ "$CI_COMMIT_BRANCH" == "main" ]]; then TAG="prod-latest" ENVIRONMENT="prod" elif [[ "$CI_COMMIT_BRANCH" == "staging" ]]; then TAG="staging-latest" ENVIRONMENT="stag" else TAG="dev-latest" ENVIRONMENT="dev" fi - echo "Building backend image for $ENVIRONMENT" - docker build -t $IMAGE_BACKEND:$TAG employee-be only: - main - staging - dev # BUILD FRONTEND build-frontend: stage: build script: - | if [[ "$CI_COMMIT_BRANCH" == "main" ]]; then TAG="prod-latest" ENVIRONMENT="prod" elif [[ "$CI_COMMIT_BRANCH" == "staging" ]]; then TAG="staging-latest" ENVIRONMENT="stag" else TAG="dev-latest" ENVIRONMENT="dev" fi - echo "Building frontend image for $ENVIRONMENT" - docker build -t $IMAGE_FRONTEND:$TAG employee-fe only: - main - staging - dev # PUSH IMAGES TO REGISTRY push-images: stage: push script: - | if [[ "$CI_COMMIT_BRANCH" == "main" ]]; then TAG="prod-latest" elif [[ "$CI_COMMIT_BRANCH" == "staging" ]]; then TAG="staging-latest" else TAG="dev-latest" fi - echo "Pushing images with tag $TAG..." - docker push $IMAGE_BACKEND:$TAG - docker push $IMAGE_FRONTEND:$TAG only: - main - staging - dev # DEPLOY USING KUSTOMIZE deploy: stage: deploy image: name: bitnami/kubectl:latest entrypoint: [""] script: - echo "$KUBECONFIG_DATA" | base64 -d > kubeconfig.yaml - export KUBECONFIG=$(pwd)/kubeconfig.yaml - | if [[ "$CI_COMMIT_BRANCH" == "main" ]]; then ENVIRONMENT="prod" elif [[ "$CI_COMMIT_BRANCH" == "staging" ]]; then ENVIRONMENT="stag" else ENVIRONMENT="dev" fi - echo "Deploying to $ENVIRONMENT environment..." - kubectl apply -k employee-manifest/overlays/$ENVIRONMENT only: - main - staging - dev