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.
99 lines
3.3 KiB
99 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
|
|
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
|