mirror of
https://gitlab.com/megazordpobeda/DataRush.git
synced 2026-05-22 23:17:09 +00:00
ci: added rollbacks and deployments
This commit is contained in:
+30
-71
@@ -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
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user