You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
3.3 KiB

stages:
- build
- lint
- deploy
variables:
CONTAINERS_NAME: sst_postamates
IMAGE_NAME: $CI_REGISTRY_IMAGE
default:
tags:
- deploy-remote
.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
- ls
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
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 $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-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)
- >
if [ ! -z "$FLIST" ];
then
mkdir -p build/reports;
flake8 --format junit-xml $FLIST > build/reports/flake8-junit.xml || flake8 $FLIST;
else
echo "No files to lint"
true;
fi
only:
refs:
- merge_requests
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