From aa48cbce9f03f525387969fa7d39e2de7c25c889 Mon Sep 17 00:00:00 2001 From: Justin Kreller Date: Fri, 29 Nov 2024 03:11:03 +0100 Subject: [PATCH] fix: add job rules --- .gitlab-ci.yml | 48 +++++++++++++++++ charts/ci-build-deploy.yml | 108 ++++++++++++++++--------------------- docker-compose.dev.yml | 7 ++- docker-compose.prod.yml | 7 ++- docker-compose.yml | 1 - 5 files changed, 101 insertions(+), 70 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f174de0..3c5bf84 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -107,6 +107,54 @@ test-frontend: dependencies: - lint-frontend +deploy-dev: + stage: deploy + image: alpine:latest + before_script: + - apk add --no-cache openssh-client sed + - eval $(ssh-agent -s) + - ssh-add <(echo "$CI_SSH_KEY" | tr -d '\r') + script: + - sed -i -e "s|DOCKER_REGISTRY_REPO|$CI_REGISTRY_IMAGE|" docker-compose.dev.yml + - sed -i -e "s|DEV_TAG|dev|" docker-compose.dev.yml + - 'scp -P $CI_SSH_PORT -o StrictHostKeyChecking=no -o LogLevel=ERROR ./docker-compose.dev.yml + ./reverseproxy.dev.conf $CI_SSH_USER@$CI_SSH_DEV_HOST:/home/$CI_SSH_USER/docker/htwkalender/ + + ' + - 'ssh -p $CI_SSH_PORT -o StrictHostKeyChecking=no -o LogLevel=ERROR $CI_SSH_USER@$CI_SSH_DEV_HOST + "cd /home/$CI_SSH_USER/docker/htwkalender/ && docker login -u $CI_REGISTRY_USER + -p $CI_REGISTRY_PASSWORD $CI_REGISTRY && docker compose -f ./docker-compose.dev.yml + down && docker compose -f ./docker-compose.dev.yml up -d --remove-orphans && docker + logout" + + ' + rules: + - if: $CI_COMMIT_BRANCH == "development" +deploy-all: + stage: deploy + image: alpine:latest + before_script: + - apk add --no-cache openssh-client sed # install dependencies + - eval $(ssh-agent -s) # set some ssh variables + - ssh-add <(echo "$CI_SSH_KEY" | tr -d '\r') + script: + # replace some placeholders + - sed -i -e "s|DOCKER_REGISTRY_REPO|$CI_REGISTRY_IMAGE|" docker-compose.prod.yml + - sed -i -e "s|PROD_TAG|latest|" docker-compose.prod.yml + # upload necessary files to the server + - > + scp -P $CI_SSH_PORT -o StrictHostKeyChecking=no -o LogLevel=ERROR ./docker-compose.prod.yml ./reverseproxy.conf + $CI_SSH_USER@$CI_SSH_HOST:/home/$CI_SSH_USER/docker/htwkalender/ + # ssh to the server and start the service + - > + ssh -p $CI_SSH_PORT -o StrictHostKeyChecking=no -o LogLevel=ERROR $CI_SSH_USER@$CI_SSH_HOST + "cd /home/$CI_SSH_USER/docker/htwkalender/ && + docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY && + docker compose -f ./docker-compose.prod.yml down && docker compose -f ./docker-compose.prod.yml up -d --remove-orphans && docker logout && + docker exec --user root htwkalender-htwkalender-frontend-1 /bin/sh -c \"echo 'google-site-verification: $GOOGLE_VERIFICATION.html' > ./$GOOGLE_VERIFICATION.html\" " + rules: + - if: $CI_COMMIT_BRANCH == "main" + include: - local: 'charts/ci-build-deploy.yml' - template: Security/Dependency-Scanning.gitlab-ci.yml diff --git a/charts/ci-build-deploy.yml b/charts/ci-build-deploy.yml index 8b48f6a..bd3ffd6 100644 --- a/charts/ci-build-deploy.yml +++ b/charts/ci-build-deploy.yml @@ -12,7 +12,14 @@ DOCKER_CERT_PATH: "/certs/client" before_script: - echo $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY - + script: + - | + docker build --pull \ + -t $IMAGE_TAG \ + -f $DOCKERFILE \ + --target $BUILD_TARGET \ + $BUILD_PATH + - docker push "$IMAGE_TAG" artifacts: paths: - .env_file @@ -24,14 +31,6 @@ 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 @@ -39,19 +38,19 @@ 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/**/* + 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/**/* + rules: + - if: $CI_COMMIT_BRANCH == "main" + changes: + - services/data-manager/**/* .build-ical-image: extends: .build-image @@ -59,8 +58,6 @@ build-data-manager-image-prod: BUILD_TARGET: "prod" BUILD_PATH: "./services" DOCKERFILE: "./services/ical/Dockerfile" - script: - - echo "Build" after_script: - echo "export ICAL_IMAGE=$IMAGE_TAG" >> .env_file @@ -70,10 +67,10 @@ build-ical-image-dev: IMAGE_TAG: "$CI_REGISTRY_IMAGE/ical:dev" needs: - job: build-data-manager-image-dev - #rules: - # - if: $CI_COMMIT_BRANCH == "development" - # changes: - # - services/ical/**/* + rules: + - if: $CI_COMMIT_BRANCH == "development" + changes: + - services/ical/**/* build-ical-image-prod: extends: .build-ical-image @@ -81,10 +78,10 @@ build-ical-image-prod: IMAGE_TAG: "$CI_REGISTRY_IMAGE/ical:latest" needs: - job: build-data-manager-image-prod - #rules: - # - if: $CI_COMMIT_BRANCH == "main" - # changes: - # - services/ical/**/* + rules: + - if: $CI_COMMIT_BRANCH == "main" + changes: + - services/ical/**/* .build-frontend-image: extends: .build-image @@ -92,8 +89,6 @@ build-ical-image-prod: BUILD_TARGET: "prod" BUILD_PATH: "./frontend" DOCKERFILE: "./frontend/Dockerfile" - script: - - echo "Build" after_script: - echo "export FRONTEND_IMAGE=$IMAGE_TAG" >> .env_file @@ -103,10 +98,10 @@ build-frontend-image-dev: IMAGE_TAG: "$CI_REGISTRY_IMAGE/frontend:dev" needs: - job: build-ical-image-dev - #rules: - # - if: $CI_COMMIT_BRANCH == "development" - # changes: - # - frontend/**/* + rules: + - if: $CI_COMMIT_BRANCH == "development" + changes: + - frontend/**/* build-frontend-image-prod: extends: .build-frontend-image @@ -114,10 +109,10 @@ build-frontend-image-prod: IMAGE_TAG: "$CI_REGISTRY_IMAGE/frontend:latest" needs: - job: build-ical-image-prod - #rules: - # - if: $CI_COMMIT_BRANCH == "main" - # changes: - # - frontend/**/* + rules: + - if: $CI_COMMIT_BRANCH == "main" + changes: + - frontend/**/* .package-helm-chart: stage: package @@ -158,12 +153,12 @@ package-helm-chart-dev: - 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/**/* + rules: + - if: '$CI_COMMIT_BRANCH == "development"' + changes: + - services/data-manager/**/* + - services/ical/**/* + - frontend/**/* package-helm-chart-prod: extends: .package-helm-chart @@ -188,14 +183,14 @@ package-helm-chart-prod: - 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/**/* + rules: + - if: '$CI_COMMIT_BRANCH == "main"' + changes: + - services/data-manager/**/* + - services/ical/**/* + - frontend/**/* -.trigger_deploy: +trigger_deploy: stage: deploy image: alpine:latest before_script: @@ -214,14 +209,5 @@ package-helm-chart-prod: -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 \ No newline at end of file + rules: + - if: '$CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH == "development"' diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 8a30288..e2c3dcc 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -16,8 +16,7 @@ services: htwkalender-data-manager: - image: DOCKER_REGISTRY_REPO-data-manager # DOCKER_REGISTRY_REPO will be replaced by CI - command: "--http=0.0.0.0:8090 --dir=/htwkalender-data-manager/data/pb_data" + image: DOCKER_REGISTRY_REPO/data-manager:DEV_TAG # DOCKER_REGISTRY_REPO will be replaced by CI pull_policy: always restart: always volumes: @@ -26,7 +25,7 @@ services: - "net" htwkalender-ical: - image: DOCKER_REGISTRY_REPO-ical # DOCKER_REGISTRY_REPO will be replaced by CI + image: DOCKER_REGISTRY_REPO/ical:DEV_TAG # DOCKER_REGISTRY_REPO will be replaced by CI pull_policy: always restart: always environment: @@ -37,7 +36,7 @@ services: - htwkalender-data-manager htwkalender-frontend: - image: DOCKER_REGISTRY_REPO-frontend # DOCKER_REGISTRY_REPO will be replaced by CI + image: DOCKER_REGISTRY_REPO/frontend:DEV_TAG # DOCKER_REGISTRY_REPO will be replaced by CI pull_policy: always restart: always depends_on: diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 061692b..51aba43 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -16,8 +16,7 @@ services: htwkalender-data-manager: - image: DOCKER_REGISTRY_REPO-data-manager # DOCKER_REGISTRY_REPO will be replaced by CI - command: "--http=0.0.0.0:8090 --dir=/htwkalender-data-manager/data/pb_data" + image: DOCKER_REGISTRY_REPO/data-manager:PROD_TAG # DOCKER_REGISTRY_REPO will be replaced by CI pull_policy: always restart: always volumes: @@ -26,7 +25,7 @@ services: - "net" htwkalender-ical: - image: DOCKER_REGISTRY_REPO-ical # DOCKER_REGISTRY_REPO will be replaced by CI + image: DOCKER_REGISTRY_REPO/ical:PROD_TAG # DOCKER_REGISTRY_REPO will be replaced by CI pull_policy: always restart: always environment: @@ -37,7 +36,7 @@ services: - htwkalender-data-manager htwkalender-frontend: - image: DOCKER_REGISTRY_REPO-frontend # DOCKER_REGISTRY_REPO will be replaced by CI + image: DOCKER_REGISTRY_REPO/frontend:PROD_TAG # DOCKER_REGISTRY_REPO will be replaced by CI pull_policy: always restart: always depends_on: diff --git a/docker-compose.yml b/docker-compose.yml index 3da2425..ec91052 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -20,7 +20,6 @@ services: dockerfile: ./data-manager/Dockerfile context: ./services target: prod - command: "--http=0.0.0.0:8090 --dir=/htwkalender-data-manager/data/pb_data" ports: - "8090:8090" - "50051:50051"