ci: added rollbacks and deployments

This commit is contained in:
ITQ
2025-04-07 20:35:38 +03:00
parent f452855213
commit 2e159de33e
2 changed files with 38 additions and 79 deletions
+30 -71
View File
@@ -1,16 +1,18 @@
stages: stages:
- build - build
- deploy - deploy
- utils
variables: variables:
DOCKER_TLS_CERTDIR: /certs DOCKER_TLS_CERTDIR: /certs
DEPLOYMENT_VERSION: $CI_COMMIT_SHA
.build-template: &build-template .build-template: &build-template
stage: build
rules:
- if: $CI_COMMIT_REF_NAME == "master"
image: image:
name: gcr.io/kaniko-project/executor:v1.23.2-debug name: gcr.io/kaniko-project/executor:v1.23.2-debug
entrypoint: [""] entrypoint: [""]
stage: build
variables: variables:
DOCKER_CONFIG: /kaniko/.docker DOCKER_CONFIG: /kaniko/.docker
REGISTRY_USER: $CI_REGISTRY_USER REGISTRY_USER: $CI_REGISTRY_USER
@@ -30,75 +32,63 @@ variables:
build_frontend: build_frontend:
<<: *build-template <<: *build-template
rules:
- if: '$CI_COMMIT_REF_NAME == "master"'
variables: variables:
CONTEXT: "${CI_PROJECT_DIR}/services/frontend" CONTEXT: ${CI_PROJECT_DIR}/services/frontend
DOCKERFILE_PATH: "Dockerfile" DOCKERFILE_PATH: Dockerfile
IMAGE_NAME: "$CI_REGISTRY_IMAGE/frontend" IMAGE_NAME: $CI_REGISTRY_IMAGE/frontend
build_backend: build_backend:
<<: *build-template <<: *build-template
rules:
- if: '$CI_COMMIT_REF_NAME == "master"'
variables: variables:
CONTEXT: "${CI_PROJECT_DIR}/services/backend" CONTEXT: ${CI_PROJECT_DIR}/services/backend
DOCKERFILE_PATH: "Dockerfile" DOCKERFILE_PATH: Dockerfile
IMAGE_NAME: "$CI_REGISTRY_IMAGE/backend" IMAGE_NAME: $CI_REGISTRY_IMAGE/backend
build_backend-staticfiles: build_backend-staticfiles:
<<: *build-template <<: *build-template
rules:
- if: '$CI_COMMIT_REF_NAME == "master"'
variables: variables:
CONTEXT: "${CI_PROJECT_DIR}/services/backend" CONTEXT: ${CI_PROJECT_DIR}/services/backend
DOCKERFILE_PATH: "Dockerfile.staticfiles" DOCKERFILE_PATH: Dockerfile.staticfiles
IMAGE_NAME: "$CI_REGISTRY_IMAGE/backend-staticfiles" IMAGE_NAME: $CI_REGISTRY_IMAGE/backend-staticfiles
build_checker: build_checker:
<<: *build-template <<: *build-template
rules:
- if: '$CI_COMMIT_REF_NAME == "master"'
variables: variables:
CONTEXT: "${CI_PROJECT_DIR}/services/checker" CONTEXT: ${CI_PROJECT_DIR}/services/checker
DOCKERFILE_PATH: "Dockerfile" DOCKERFILE_PATH: Dockerfile
IMAGE_NAME: "$CI_REGISTRY_IMAGE/checker" IMAGE_NAME: $CI_REGISTRY_IMAGE/checker
build_custom-python: build_custom-python:
<<: *build-template <<: *build-template
when: manual
rules:
- if: '$CI_COMMIT_REF_NAME == "master"'
variables: variables:
CONTEXT: "${CI_PROJECT_DIR}/services/checker" CONTEXT: ${CI_PROJECT_DIR}/services/checker
DOCKERFILE_PATH: "Dockerfile.checker" DOCKERFILE_PATH: Dockerfile.checker
IMAGE_NAME: "$CI_REGISTRY_IMAGE/custom-python" IMAGE_NAME: $CI_REGISTRY_IMAGE/custom-python
build_docs: build_docs:
<<: *build-template <<: *build-template
when: manual
rules:
- if: '$CI_COMMIT_REF_NAME == "master"'
variables: variables:
CONTEXT: "${CI_PROJECT_DIR}/services/docs" CONTEXT: ${CI_PROJECT_DIR}/services/docs
DOCKERFILE_PATH: "Dockerfile" DOCKERFILE_PATH: Dockerfile
IMAGE_NAME: "$CI_REGISTRY_IMAGE/docs" IMAGE_NAME: $CI_REGISTRY_IMAGE/docs
deploy: deploy:
image: kroniak/ssh-client:3.19 image: kroniak/ssh-client:3.19
stage: deploy stage: deploy
rules: rules:
- if: '$CI_COMMIT_REF_NAME == "master"' - if: $CI_COMMIT_REF_NAME == "master"
variables: variables:
SSH_ADDRESS: $SSH_USER@$SSH_HOST SSH_ADDRESS: $SSH_USER@$SSH_HOST
SSH_PRIVATE_KEY: SSH_PRIVATE_KEY environment:
name: production
url: https://datarush.itqdev.xyz
script: script:
- mkdir -p ~/.ssh - mkdir -p ~/.ssh
- chmod 700 ~/.ssh - chmod 700 ~/.ssh
- echo -e "Host *\n\tStrictHostKeyChecking no\n\tIdentitiesOnly yes\n\n" > ~/.ssh/config - echo -e "Host *\n\tStrictHostKeyChecking no\n\tIdentitiesOnly yes\n\n" > ~/.ssh/config
- printf "%s\n" "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa - printf "%s\n" "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa
- ssh-keyscan -H "$SSH_HOST" -p "$SSH_PORT" > /dev/null 2>&1 - ssh-keyscan -H $SSH_HOST -p $SSH_PORT > /dev/null 2>&1
- AUTH_COMMAND="echo "$CI_REGISTRY_PASSWORD" | docker login $CI_REGISTRY --username $CI_REGISTRY_USER --password-stdin"; - AUTH_COMMAND="echo "$CI_REGISTRY_PASSWORD" | docker login $CI_REGISTRY --username $CI_REGISTRY_USER --password-stdin";
- ssh -p $SSH_PORT $SSH_ADDRESS "$AUTH_COMMAND" > /dev/null 2>&1 - ssh -p $SSH_PORT $SSH_ADDRESS "$AUTH_COMMAND" > /dev/null 2>&1
@@ -107,43 +97,12 @@ deploy:
- | - |
ssh -p $SSH_PORT $SSH_ADDRESS > /dev/null 2>&1 <<'EOF' ssh -p $SSH_PORT $SSH_ADDRESS > /dev/null 2>&1 <<'EOF'
cd ~/deploy cd ~/deploy
docker system prune --force > deploy.log 2>&1 docker system prune --force > deploy.log 2>&1
export VERSION="$DEPLOYMENT_VERSION"
docker compose pull --policy always -q > deploy.log 2>&1 docker compose pull --policy always -q > deploy.log 2>&1
docker compose up -d --remove-orphans --force-recreate >> deploy.log 2>&1 docker compose up -d --remove-orphans --force-recreate >> deploy.log 2>&1
docker compose ps >> deploy.log 2>&1 docker compose ps >> deploy.log 2>&1
EOF EOF
retry: 2 retry: 2
reset-compose:
image: kroniak/ssh-client:3.19
stage: utils
when: manual
rules:
- if: '$CI_COMMIT_REF_NAME == "master"'
variables:
SSH_HOST: $SSH_HOST
SSH_USER: $SSH_USER
SSH_ADDRESS: "$SSH_USER@$SSH_HOST"
SSH_PRIVATE_KEY: SSH_PRIVATE_KEY
script:
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
- echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- ssh-keyscan -H "$SSH_HOST" > /dev/null 2>&1
- AUTH_COMMAND="echo "$CI_REGISTRY_PASSWORD" | docker login $CI_REGISTRY --username $CI_REGISTRY_USER --password-stdin";
- ssh $SSH_ADDRESS "$AUTH_COMMAND"
- scp -C -r infrastructure/ compose.yaml $SSH_ADDRESS:~/deploy/
- ssh $SSH_ADDRESS "docker -v"
- |
ssh $SSH_ADDRESS <<'EOF'
cd ~/deploy
docker compose down -v > deploy.log 2>&1
docker compose up -d --remove-orphans --force-recreate >> deploy.log 2>&1
docker compose ps >> deploy.log 2>&1
EOF
retry: 2
+8 -8
View File
@@ -2,7 +2,7 @@ name: datarush
services: services:
backend: backend:
image: registry.gitlab.com/megazordpobeda/datarush/backend:latest image: registry.gitlab.com/megazordpobeda/datarush/backend:${VERSION:-latest}
build: build:
context: ./services/backend context: ./services/backend
depends_on: depends_on:
@@ -40,7 +40,7 @@ services:
restart: unless-stopped restart: unless-stopped
backend-initdb: backend-initdb:
image: registry.gitlab.com/megazordpobeda/datarush/backend:latest image: registry.gitlab.com/megazordpobeda/datarush/backend:${VERSION:-latest}
build: build:
context: ./services/backend context: ./services/backend
command: ./scripts/initdb command: ./scripts/initdb
@@ -64,7 +64,7 @@ services:
required: false required: false
backend-staticfiles: backend-staticfiles:
image: registry.gitlab.com/megazordpobeda/datarush/backend-staticfiles:latest image: registry.gitlab.com/megazordpobeda/datarush/backend-staticfiles:${VERSION:-latest}
build: build:
context: ./services/backend context: ./services/backend
dockerfile: Dockerfile.staticfiles dockerfile: Dockerfile.staticfiles
@@ -89,7 +89,7 @@ services:
restart: unless-stopped restart: unless-stopped
backend-celery-worker: backend-celery-worker:
image: registry.gitlab.com/megazordpobeda/datarush/backend:latest image: registry.gitlab.com/megazordpobeda/datarush/backend:${VERSION:-latest}
build: build:
context: ./services/backend context: ./services/backend
command: celery -A config worker -l INFO command: celery -A config worker -l INFO
@@ -127,7 +127,7 @@ services:
restart: unless-stopped restart: unless-stopped
frontend: frontend:
image: registry.gitlab.com/megazordpobeda/datarush/frontend:latest image: registry.gitlab.com/megazordpobeda/datarush/frontend:${VERSION:-latest}
env_file: env_file:
- path: ./infrastructure/frontend/.env.template - path: ./infrastructure/frontend/.env.template
required: true required: true
@@ -361,7 +361,7 @@ services:
target: /prometheus target: /prometheus
docs: docs:
image: registry.gitlab.com/megazordpobeda/datarush/docs:latest image: registry.gitlab.com/megazordpobeda/datarush/docs:${VERSION:-latest}
build: build:
context: ./docs context: ./docs
dockerfile: Dockerfile dockerfile: Dockerfile
@@ -375,11 +375,11 @@ services:
shm_size: 4mb shm_size: 4mb
custom_python: custom_python:
image: registry.gitlab.com/megazordpobeda/datarush/custom-python:latest image: registry.gitlab.com/megazordpobeda/datarush/custom-python:${VERSION:-latest}
entrypoint: ["sh", "-c", "exit 0"] entrypoint: ["sh", "-c", "exit 0"]
checker: checker:
image: registry.gitlab.com/megazordpobeda/datarush/checker:latest image: registry.gitlab.com/megazordpobeda/datarush/checker:${VERSION:-latest}
build: build:
context: ./services/checker context: ./services/checker
dockerfile: Dockerfile dockerfile: Dockerfile