.build-image: stage: build image: docker:latest services: - docker:dind tags: - image variables: DOCKER_HOST: tcp://docker:2376 DOCKER_TLS_CERTDIR: "/certs" DOCKER_TLS_VERIFY: 1 DOCKER_CERT_PATH: "/certs/client" before_script: - echo $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY artifacts: paths: - .env_file expire_in: 1 hour .build-data-manager-image: extends: .build-image variables: BUILD_TARGET: "prod" BUILD_PATH: "./services" DOCKERFILE: "./services/data-manager/Dockerfile" script: - | docker build --pull \ -t $IMAGE_TAG \ -f $DOCKERFILE \ --target $BUILD_TARGET \ $BUILD_PATH - docker push "$IMAGE_TAG" after_script: - echo "export DATA_MANAGER_IMAGE=$IMAGE_TAG" >> .env_file build-data-manager-image-dev: extends: .build-data-manager-image variables: IMAGE_TAG: "$CI_REGISTRY_IMAGE/data-manager:dev" #rules: # - if: $CI_COMMIT_BRANCH == "development" # changes: # - services/data-manager/**/* build-data-manager-image-prod: extends: .build-data-manager-image variables: IMAGE_TAG: "$CI_REGISTRY_IMAGE/data-manager:latest" #rules: # - if: $CI_COMMIT_BRANCH == "main" # changes: # - services/data-manager/**/* .build-ical-image: extends: .build-image variables: BUILD_TARGET: "prod" BUILD_PATH: "./services" DOCKERFILE: "./services/ical/Dockerfile" script: - echo "Build" after_script: - echo "export ICAL_IMAGE=$IMAGE_TAG" >> .env_file build-ical-image-dev: extends: .build-ical-image variables: IMAGE_TAG: "$CI_REGISTRY_IMAGE/ical:dev" needs: - job: build-data-manager-image-dev #rules: # - if: $CI_COMMIT_BRANCH == "development" # changes: # - services/ical/**/* build-ical-image-prod: extends: .build-ical-image variables: IMAGE_TAG: "$CI_REGISTRY_IMAGE/ical:latest" needs: - job: build-data-manager-image-prod #rules: # - if: $CI_COMMIT_BRANCH == "main" # changes: # - services/ical/**/* .build-frontend-image: extends: .build-image variables: BUILD_TARGET: "prod" BUILD_PATH: "./frontend" DOCKERFILE: "./frontend/Dockerfile" script: - echo "Build" after_script: - echo "export FRONTEND_IMAGE=$IMAGE_TAG" >> .env_file build-frontend-image-dev: extends: .build-frontend-image variables: IMAGE_TAG: "$CI_REGISTRY_IMAGE/frontend:dev" needs: - job: build-ical-image-dev #rules: # - if: $CI_COMMIT_BRANCH == "development" # changes: # - frontend/**/* build-frontend-image-prod: extends: .build-frontend-image variables: IMAGE_TAG: "$CI_REGISTRY_IMAGE/frontend:latest" needs: - job: build-ical-image-prod #rules: # - if: $CI_COMMIT_BRANCH == "main" # changes: # - frontend/**/* .package-helm-chart: stage: package image: name: alpine/helm:3 entrypoint: [""] variables: CHARTS_DIR: $CI_PROJECT_DIR/charts VALUES_FILE: $CI_PROJECT_DIR/charts/values.yaml CHART_FILE: $CI_PROJECT_DIR/charts/Chart.yaml before_script: - apk add --no-cache gettext - echo "HELM_ARTIFACT_JOB_NAME=$CI_JOB_NAME" >> .env_file - echo "PROJECT_URL=$PROJECT_URL" >> .env_file - echo "PROJECT_NAME=$PROJECT_NAME" >> .env_file - source .env_file - echo "Updating deployment URLs..." - yq e -i '(.dataManager.image.name) = env(DATA_MANAGER_IMAGE)' $VALUES_FILE - yq e -i '(.ical.image.name) = env(ICAL_IMAGE)' $VALUES_FILE - yq e -i '(.frontend.image.name) = env(FRONTEND_IMAGE)' $VALUES_FILE - yq e -i '(.frontend.host) = env(PROJECT_URL)' $VALUES_FILE after_script: - yq e -i 'explode(.)' "$VALUES_FILE" - helm dependency update $CHARTS_DIR - helm package $CHARTS_DIR --destination ./ artifacts: paths: - "*.tgz" - .env_file expire_in: 1 hour package-helm-chart-dev: extends: .package-helm-chart variables: PROJECT_URL: $PROJECT_URL_DEV PROJECT_NAME: $CI_PROJECT_NAME-dev script: - yq e -i '(.production) = false' $VALUES_FILE needs: - build-frontend-image-dev #rules: # - if: '$CI_COMMIT_BRANCH == "development"' # changes: # - services/data-manager/**/* # - services/ical/**/* # - frontend/**/* package-helm-chart-prod: extends: .package-helm-chart variables: PROJECT_URL: $PROJECT_URL_PROD PROJECT_NAME: $CI_PROJECT_NAME script: - yq e -i '(.frontend.googleSiteVerification) = env(GOOGLE_VERIFICATION)' $VALUES_FILE - | cat < configmap-google.yaml {{- if .Values.production }} apiVersion: v1 kind: ConfigMap metadata: name: configmap-google namespace: $PROJECT_NAME data: $GOOGLE_VERIFICATION.html: | google-site-verification: $GOOGLE_VERIFICATION.html {{- end }} EOF - envsubst < configmap-google.yaml > $CHARTS_DIR/templates/configmap-google.yaml needs: - build-frontend-image-prod #rules: # - if: '$CI_COMMIT_BRANCH == "main"' # changes: # - services/data-manager/**/* # - services/ical/**/* # - frontend/**/* .trigger_deploy: stage: deploy image: alpine:latest before_script: - apk add --no-cache curl - source .env_file script: - echo "Triggering deploy pipeline ..." - | curl -X POST \ -F "token=$CI_DEPLOY_REPO_TRIGGER_TOKEN" \ -F "ref=$CI_DEPLOY_REPO_REF" \ -F "variables[UPSTREAM_PROJECT_NAME]=$PROJECT_NAME" \ -F "variables[UPSTREAM_PROJECT_ID]=$CI_PROJECT_ID" \ -F "variables[UPSTREAM_COMMIT_REF_NAME]=$CI_COMMIT_REF_NAME" \ -F "variables[UPSTREAM_HELM_ARTIFACT_JOB_NAME]=$HELM_ARTIFACT_JOB_NAME" \ -F "variables[UPSTREAM_REGISTRY_PATH]=$CI_REGISTRY_IMAGE" \ "$CI_API_V4_URL/projects/$CI_DEPLOY_REPO_ID/trigger/pipeline" - "echo 'The $PROJECT_NAME can be viewed on: $PROJECT_URL'" #rules: # - if: '$CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH == "development"' trigger-dev: extends: .trigger_deploy needs: - package-helm-chart-dev trigger-prod: extends: .trigger_deploy needs: - package-helm-chart-prod