dev
Dmitry Titov 3 years ago
parent 291b35288c
commit fd9528e99e

@ -1,27 +1,64 @@
stages:
- build
- lint
# - build
- deploy
deploy:
variables:
CONTAINERS_NAME: sst_postamates
IMAGE_NAME: $CI_REGISTRY_IMAGE
.use_cached_requirements: &use_cached_requirements
variables:
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
cache:
key: $CI_COMMIT_REF_SLUG
paths:
- .cache/pip
policy: pull-push
build-job:
stage: build
before_script:
- sudo docker login -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD $CI_REGISTRY
script:
- sudo docker pull $IMAGE_NAME:latest || true
- sudo docker build --cache-from $IMAGE_NAME:latest --tag $IMAGE_NAME:$CI_COMMIT_SHORT_SHA --tag $IMAGE_NAME:latest .
- sudo docker push $IMAGE_NAME:$CI_COMMIT_SHORT_SHA
- sudo docker push $IMAGE_NAME:latest
rules:
- if: $CI_COMMIT_BRANCH == 'sst_main'
.deploy: &deploy-common
stage: deploy
only:
- sst_main
before_script:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client git -y )'
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan $REMOTE_HOST >> ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
- ssh $REMOTE_USER docker login -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD $CI_REGISTRY
script:
- cd /home/toren332/sst_postamates/
- sudo docker-compose down
- sudo git fetch
- sudo git reset --hard origin/sst_main
- sudo git submodule foreach git pull origin sst_main
- sudo docker-compose up -d
tags:
- deploy-remote
flake8:
- cd $CI_PROJECT_DIR
- ssh $REMOTE_USER docker pull $IMAGE_NAME:$CI_COMMIT_SHORT_SHA
- DOCKER_HOST="ssh://$REMOTE_USER" docker-compose -f $COMPOSE up -d
deploy-test-job:
<<: *deploy-common
variables:
REMOTE_HOST: $REMOTE_HOST_TEST
REMOTE_USER: $REMOTE_USER_TEST
COMPOSE: docker-compose.test.yml
rules:
- if: $CI_COMMIT_BRANCH == 'sst_main'
pylint:
<<: *use_cached_requirements
stage: lint
before_script:
- pip install flake8_formatter_junit_xml
- export PATH="$HOME/.local/bin:$PATH"
before_script:
- pip install flake8-codeclimate
script:
- set -x
- FLIST=$(git --no-pager diff --diff-filter=d --name-only $(git merge-base --fork-point origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME) $CI_COMMIT_SHA | egrep ".py$" | grep -v ".docker/"|| true)
@ -40,12 +77,22 @@ flake8:
changes:
- "*.py"
- "**/*.py"
tags:
- deploy-remote
artifacts:
reports:
junit: ./build/reports/flake8-junit.xml
expire_in: 7 days
allow_failure: false
notify success:
stage: .post
script: curl -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d "chat_id=-1001855628208&reply_to_message_id=98&parse_mode=markdown&text=*[$CI_PROJECT_NAME]* updated with [MR $CI_MERGE_REQUEST_TITLE]($CI_MERGE_REQUEST_PROJECT_URL/-/merge_requests/$CI_MERGE_REQUEST_IID) by $GITLAB_USER_NAME"
rules:
- if: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME !~ /^silent/ && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'sst_main'
when: on_success
notify failure:
stage: .post
script: curl -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d "chat_id=-1001855628208&reply_to_message_id=98&text=*[$CI_PROJECT_NAME]* Oops failed pipeline in [MR $CI_MERGE_REQUEST_TITLE]($CI_MERGE_REQUEST_PROJECT_URL/-/merge_requests/$CI_MERGE_REQUEST_IID) by $GITLAB_USER_NAME"
rules:
- if: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME !~ /^silent/ && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'sst_main'
when: on_failure

@ -4,7 +4,6 @@ repos:
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: debug-statements
- id: double-quote-string-fixer
- id: name-tests-test

@ -0,0 +1,72 @@
version: '3.5'
x-postgres-variables: &postgres-variables
POSTGRES_DB: "${POSTGRES_DB}"
POSTGRES_HOST: "${POSTGRES_HOST}"
POSTGRES_PORT: "${POSTGRES_PORT}"
POSTGRES_USER: "${POSTGRES_USER}"
POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
POSTGRES_HOST_AUTH_METHOD: "${POSTGRES_HOST_AUTH_METHOD}"
x-django-variables: &django-variables
PYTHONUNBUFFERED: 1
DJANGO_PORT: "${DJANGO_PORT}"
DEBUG: "${DEBUG}"
x-frontend-variables: &frontend-variables
DOMAIN: "${DOMAIN}"
REACT_APP_DOMAIN_URL: "https://${DOMAIN}/"
x-martin-variables: &martin-variables
MARTIN_PORT: "${MARTIN_PORT}"
services:
django:
container_name: ${CONTAINERS_NAME}_django
image: ${IMAGE_NAME}:${CI_COMMIT_SHORT_SHA}
command: >
sh -c "python manage.py migrate &&
python manage.py collectstatic --noinput &&
python manage.py runserver 0.0.0.0:${DJANGO_PORT}"
environment:
<<: *postgres-variables
<<: *django-variables
<<: *frontend-variables
volumes:
- .:/code
- ./django_static/:/code/django_static/
- ./media/:/code/media/
ports:
- "${DJANGO_PORT}:${DJANGO_PORT}"
expose:
- "${DJANGO_PORT}"
restart: always
depends_on:
- db
db:
container_name: ${CONTAINERS_NAME}_db
image: mdillon/postgis
environment:
<<: *postgres-variables
ports:
- "${POSTGRES_PORT}:${POSTGRES_PORT}"
expose:
- "${POSTGRES_PORT}"
volumes:
- ${POSTGRES_VOLUME_PATH}:/var/lib/postgresql/data
command: -p ${POSTGRES_PORT}
martin:
container_name: ${CONTAINERS_NAME}_martin
image: urbica/martin
ports:
- "${MARTIN_PORT}:3000"
environment:
<<: *martin-variables
WATCH_MODE: "true"
DATABASE_URL: "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:${POSTGRES_PORT}/${POSTGRES_DB}"
depends_on:
- db
- django
restart: always
Loading…
Cancel
Save