diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 228cf24..a015311 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,16 +1,18 @@ stages: - build - deploy - - utils variables: DOCKER_TLS_CERTDIR: /certs + DEPLOYMENT_VERSION: $CI_COMMIT_SHA .build-template: &build-template + stage: build + rules: + - if: $CI_COMMIT_REF_NAME == "master" image: name: gcr.io/kaniko-project/executor:v1.23.2-debug entrypoint: [""] - stage: build variables: DOCKER_CONFIG: /kaniko/.docker REGISTRY_USER: $CI_REGISTRY_USER @@ -30,75 +32,63 @@ variables: build_frontend: <<: *build-template - rules: - - if: '$CI_COMMIT_REF_NAME == "master"' variables: - CONTEXT: "${CI_PROJECT_DIR}/services/frontend" - DOCKERFILE_PATH: "Dockerfile" - IMAGE_NAME: "$CI_REGISTRY_IMAGE/frontend" + CONTEXT: ${CI_PROJECT_DIR}/services/frontend + DOCKERFILE_PATH: Dockerfile + IMAGE_NAME: $CI_REGISTRY_IMAGE/frontend build_backend: <<: *build-template - rules: - - if: '$CI_COMMIT_REF_NAME == "master"' variables: - CONTEXT: "${CI_PROJECT_DIR}/services/backend" - DOCKERFILE_PATH: "Dockerfile" - IMAGE_NAME: "$CI_REGISTRY_IMAGE/backend" + CONTEXT: ${CI_PROJECT_DIR}/services/backend + DOCKERFILE_PATH: Dockerfile + IMAGE_NAME: $CI_REGISTRY_IMAGE/backend build_backend-staticfiles: <<: *build-template - rules: - - if: '$CI_COMMIT_REF_NAME == "master"' variables: - CONTEXT: "${CI_PROJECT_DIR}/services/backend" - DOCKERFILE_PATH: "Dockerfile.staticfiles" - IMAGE_NAME: "$CI_REGISTRY_IMAGE/backend-staticfiles" + CONTEXT: ${CI_PROJECT_DIR}/services/backend + DOCKERFILE_PATH: Dockerfile.staticfiles + IMAGE_NAME: $CI_REGISTRY_IMAGE/backend-staticfiles build_checker: <<: *build-template - rules: - - if: '$CI_COMMIT_REF_NAME == "master"' variables: - CONTEXT: "${CI_PROJECT_DIR}/services/checker" - DOCKERFILE_PATH: "Dockerfile" - IMAGE_NAME: "$CI_REGISTRY_IMAGE/checker" + CONTEXT: ${CI_PROJECT_DIR}/services/checker + DOCKERFILE_PATH: Dockerfile + IMAGE_NAME: $CI_REGISTRY_IMAGE/checker build_custom-python: <<: *build-template - when: manual - rules: - - if: '$CI_COMMIT_REF_NAME == "master"' variables: - CONTEXT: "${CI_PROJECT_DIR}/services/checker" - DOCKERFILE_PATH: "Dockerfile.checker" - IMAGE_NAME: "$CI_REGISTRY_IMAGE/custom-python" + CONTEXT: ${CI_PROJECT_DIR}/services/checker + DOCKERFILE_PATH: Dockerfile.checker + IMAGE_NAME: $CI_REGISTRY_IMAGE/custom-python build_docs: <<: *build-template - when: manual - rules: - - if: '$CI_COMMIT_REF_NAME == "master"' variables: - CONTEXT: "${CI_PROJECT_DIR}/services/docs" - DOCKERFILE_PATH: "Dockerfile" - IMAGE_NAME: "$CI_REGISTRY_IMAGE/docs" + CONTEXT: ${CI_PROJECT_DIR}/services/docs + DOCKERFILE_PATH: Dockerfile + IMAGE_NAME: $CI_REGISTRY_IMAGE/docs deploy: image: kroniak/ssh-client:3.19 stage: deploy rules: - - if: '$CI_COMMIT_REF_NAME == "master"' + - if: $CI_COMMIT_REF_NAME == "master" variables: SSH_ADDRESS: $SSH_USER@$SSH_HOST - SSH_PRIVATE_KEY: SSH_PRIVATE_KEY + environment: + name: production + url: https://datarush.itqdev.xyz script: - mkdir -p ~/.ssh - chmod 700 ~/.ssh - echo -e "Host *\n\tStrictHostKeyChecking no\n\tIdentitiesOnly yes\n\n" > ~/.ssh/config - printf "%s\n" "$SSH_PRIVATE_KEY" > ~/.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"; - 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' cd ~/deploy + docker system prune --force > deploy.log 2>&1 + + export VERSION="$DEPLOYMENT_VERSION" docker compose pull --policy always -q > 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 - - -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 diff --git a/compose.yaml b/compose.yaml index d9a1e5c..09fd60c 100644 --- a/compose.yaml +++ b/compose.yaml @@ -2,7 +2,7 @@ name: datarush services: backend: - image: registry.gitlab.com/megazordpobeda/datarush/backend:latest + image: registry.gitlab.com/megazordpobeda/datarush/backend:${VERSION:-latest} build: context: ./services/backend depends_on: @@ -40,7 +40,7 @@ services: restart: unless-stopped backend-initdb: - image: registry.gitlab.com/megazordpobeda/datarush/backend:latest + image: registry.gitlab.com/megazordpobeda/datarush/backend:${VERSION:-latest} build: context: ./services/backend command: ./scripts/initdb @@ -64,7 +64,7 @@ services: required: false backend-staticfiles: - image: registry.gitlab.com/megazordpobeda/datarush/backend-staticfiles:latest + image: registry.gitlab.com/megazordpobeda/datarush/backend-staticfiles:${VERSION:-latest} build: context: ./services/backend dockerfile: Dockerfile.staticfiles @@ -89,7 +89,7 @@ services: restart: unless-stopped backend-celery-worker: - image: registry.gitlab.com/megazordpobeda/datarush/backend:latest + image: registry.gitlab.com/megazordpobeda/datarush/backend:${VERSION:-latest} build: context: ./services/backend command: celery -A config worker -l INFO @@ -127,7 +127,7 @@ services: restart: unless-stopped frontend: - image: registry.gitlab.com/megazordpobeda/datarush/frontend:latest + image: registry.gitlab.com/megazordpobeda/datarush/frontend:${VERSION:-latest} env_file: - path: ./infrastructure/frontend/.env.template required: true @@ -361,7 +361,7 @@ services: target: /prometheus docs: - image: registry.gitlab.com/megazordpobeda/datarush/docs:latest + image: registry.gitlab.com/megazordpobeda/datarush/docs:${VERSION:-latest} build: context: ./docs dockerfile: Dockerfile @@ -375,11 +375,11 @@ services: shm_size: 4mb 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"] checker: - image: registry.gitlab.com/megazordpobeda/datarush/checker:latest + image: registry.gitlab.com/megazordpobeda/datarush/checker:${VERSION:-latest} build: context: ./services/checker dockerfile: Dockerfile