Feature/cicd See merge request spatial/postamates!49dev
commit
a3db0155fb
@ -1,7 +1,10 @@
|
|||||||
.gitignore
|
.gitignore
|
||||||
.gitlab/*
|
|
||||||
.gitlab-ci.yml
|
.gitlab-ci.yml
|
||||||
README.md
|
README.md
|
||||||
.git/*
|
|
||||||
.pre-commit-config.yaml
|
.pre-commit-config.yaml
|
||||||
.flake8
|
.flake8
|
||||||
|
.env.like
|
||||||
|
.git
|
||||||
|
.gitlab
|
||||||
|
docker-compose.*
|
||||||
|
deploy
|
||||||
|
|||||||
@ -1,86 +1,137 @@
|
|||||||
|
---
|
||||||
|
variables:
|
||||||
|
DOCKER_IMAGE_TAG: ${YC_CONTAINER_REGISTRY}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_SLUG}.${CI_COMMIT_SHORT_SHA}
|
||||||
|
RELEASE_DOCKER_IMAGE_TAG: ${YC_CONTAINER_REGISTRY}/${CI_PROJECT_NAME}:${CI_COMMIT_TAG}
|
||||||
|
DEPLOY_KUBER_NAMESPACE: spatial
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
- build
|
- build
|
||||||
- lint
|
# - lint
|
||||||
- deploy
|
- deploy
|
||||||
|
|
||||||
variables:
|
build-docker:
|
||||||
CONTAINERS_NAME: sst_postamates
|
stage: build
|
||||||
IMAGE_NAME: $CI_REGISTRY_IMAGE
|
|
||||||
|
|
||||||
default:
|
|
||||||
tags:
|
tags:
|
||||||
- deploy-remote
|
- shell
|
||||||
|
script:
|
||||||
|
- >
|
||||||
|
docker build
|
||||||
|
--build-arg YC_CONTAINER_REGISTRY=${YC_CONTAINER_REGISTRY}
|
||||||
|
-t ${DOCKER_IMAGE_TAG} .
|
||||||
|
- docker push ${DOCKER_IMAGE_TAG}
|
||||||
|
|
||||||
.use_cached_requirements: &use_cached_requirements
|
deploy_dev_kuber:
|
||||||
|
extends: .deploy_base_kuber
|
||||||
variables:
|
variables:
|
||||||
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
|
INGRESS_HOST: "postnet.dev.selftech.ru"
|
||||||
cache:
|
tags:
|
||||||
key: $CI_COMMIT_REF_SLUG
|
- docker
|
||||||
paths:
|
environment:
|
||||||
- .cache/pip
|
name: dev
|
||||||
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
|
.deploy_base_kuber:
|
||||||
|
image: ${YC_CONTAINER_REGISTRY}/public/helm-kubectl-git:1.0.0
|
||||||
stage: deploy
|
stage: deploy
|
||||||
before_script:
|
before_script:
|
||||||
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client git -y )'
|
- KUBE_CONFIG=`echo ${CI_ENVIRONMENT_NAME}_kubeconfig`
|
||||||
- eval $(ssh-agent -s)
|
- mkdir -p ${HOME}/.kube
|
||||||
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
|
- 'cat ${!KUBE_CONFIG} > ${HOME}/.kube/config'
|
||||||
- mkdir -p ~/.ssh
|
- chmod -R 700 ${HOME}/.kube
|
||||||
- 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:
|
script:
|
||||||
- cd $CI_PROJECT_DIR
|
- sed -i "s|DEPLOY_IMAGE_TAG|${DOCKER_IMAGE_TAG}|g" ./deploy/django.yml
|
||||||
- ssh $REMOTE_USER docker pull $IMAGE_NAME:$CI_COMMIT_SHORT_SHA
|
- sed -i "s|ADDRESS_INGRESS_HOST|${INGRESS_HOST}|g" ./deploy/django.yml
|
||||||
- DOCKER_HOST="ssh://$REMOTE_USER" docker-compose -f $COMPOSE up -d
|
- sed -i "s|DEPLOY_IMAGE_TAG|${DOCKER_IMAGE_TAG}|g" ./deploy/worker.yml
|
||||||
- DOCKER_HOST="ssh://$REMOTE_USER" docker restart sst_postamates_martin
|
- sed -i "s|DEPLOY_IMAGE_TAG|${DOCKER_IMAGE_TAG}|g" ./deploy/beat.yml
|
||||||
|
- kubectl apply -f ./deploy/django.yml
|
||||||
|
- kubectl apply -f ./deploy/worker.yml
|
||||||
|
- kubectl apply -f ./deploy/beat.yml
|
||||||
|
dependencies: []
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- ./deploy/django.yml
|
||||||
|
- ./deploy/worker.yml
|
||||||
|
- ./deploy/beat.yml
|
||||||
|
expire_in: 1 week
|
||||||
|
when: manual
|
||||||
|
|
||||||
deploy-test-job:
|
# variables:
|
||||||
<<: *deploy-common
|
# CONTAINERS_NAME: sst_postamates
|
||||||
variables:
|
# IMAGE_NAME: $CI_REGISTRY_IMAGE
|
||||||
REMOTE_HOST: $REMOTE_HOST_TEST
|
|
||||||
REMOTE_USER: $REMOTE_USER_TEST
|
|
||||||
COMPOSE: docker-compose.test.yml
|
|
||||||
rules:
|
|
||||||
- if: $CI_COMMIT_BRANCH == 'sst_main'
|
|
||||||
|
|
||||||
pylint:
|
# default:
|
||||||
<<: *use_cached_requirements
|
# tags:
|
||||||
stage: lint
|
# - deploy-remote
|
||||||
before_script:
|
|
||||||
- pip install flake8-codeclimate
|
# .use_cached_requirements: &use_cached_requirements
|
||||||
script:
|
# variables:
|
||||||
- set -x
|
# PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
|
||||||
- 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)
|
# cache:
|
||||||
- >
|
# key: $CI_COMMIT_REF_SLUG
|
||||||
if [ ! -z "$FLIST" ];
|
# paths:
|
||||||
then
|
# - .cache/pip
|
||||||
mkdir -p build/reports;
|
# policy: pull-push
|
||||||
flake8 --format junit-xml $FLIST > build/reports/flake8-junit.xml || flake8 $FLIST;
|
|
||||||
else
|
# build-job:
|
||||||
echo "No files to lint"
|
# stage: build
|
||||||
true;
|
# before_script:
|
||||||
fi
|
# - sudo docker login -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD $CI_REGISTRY
|
||||||
only:
|
# - ls
|
||||||
refs:
|
# script:
|
||||||
- merge_requests
|
# - sudo docker pull $IMAGE_NAME:latest || true
|
||||||
artifacts:
|
# - sudo docker build --cache-from $IMAGE_NAME:latest --tag $IMAGE_NAME:$CI_COMMIT_SHORT_SHA --tag $IMAGE_NAME:latest .
|
||||||
reports:
|
# - sudo docker push $IMAGE_NAME:$CI_COMMIT_SHORT_SHA
|
||||||
junit: ./build/reports/flake8-junit.xml
|
# - sudo docker push $IMAGE_NAME:latest
|
||||||
expire_in: 7 days
|
# rules:
|
||||||
allow_failure: false
|
# - 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
|
||||||
|
# - DOCKER_HOST="ssh://$REMOTE_USER" docker restart sst_postamates_martin
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|||||||
@ -1,16 +1,18 @@
|
|||||||
FROM python:3.8
|
ARG YC_CONTAINER_REGISTRY
|
||||||
|
FROM ${YC_CONTAINER_REGISTRY}/public/python:3.8
|
||||||
|
|
||||||
RUN apt-get update &&\
|
RUN apt-get update && \
|
||||||
apt-get install -y binutils libproj-dev gdal-bin
|
apt-get install -y binutils libproj-dev gdal-bin
|
||||||
|
|
||||||
ENV PYTHONUNBUFFERED 1
|
ENV PYTHONUNBUFFERED 1
|
||||||
|
|
||||||
RUN mkdir /code
|
|
||||||
|
|
||||||
WORKDIR /code
|
WORKDIR /code
|
||||||
|
|
||||||
COPY requirements.txt /code/
|
COPY requirements.txt /code/
|
||||||
|
|
||||||
RUN pip install -r requirements.txt
|
RUN pip install -r /code/requirements.txt
|
||||||
|
|
||||||
|
# RUN apt purge binutils libproj-dev gdal-bin -y && \
|
||||||
|
# apt autoremove -y
|
||||||
|
|
||||||
COPY . /code/
|
COPY . /code/
|
||||||
|
|||||||
@ -0,0 +1,32 @@
|
|||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: postamates-beat
|
||||||
|
namespace: spatial
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: postamates-beat
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: postamates-beat
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: postamates-beat
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: beat
|
||||||
|
image: DEPLOY_IMAGE_TAG
|
||||||
|
command: ["sh", "-c", "celery -A postamates beat -l info --scheduler beat_celery_beat.schedulers:DatabaseScheduler"]
|
||||||
|
envFrom:
|
||||||
|
- configMapRef:
|
||||||
|
name: postamates-configmap
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: "256Mi"
|
||||||
|
cpu: "50m"
|
||||||
|
limits:
|
||||||
|
memory: "256Mi"
|
||||||
|
cpu: "50m"
|
||||||
@ -0,0 +1,98 @@
|
|||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: postamates-django
|
||||||
|
namespace: spatial
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: postamates-django
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: postamates-django
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: postamates-django
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: django
|
||||||
|
image: DEPLOY_IMAGE_TAG
|
||||||
|
command: ["sh", "-c", "python manage.py migrate && python manage.py collectstatic --noinput && python manage.py runserver 0.0.0.0:${DJANGO_PORT}"]
|
||||||
|
ports:
|
||||||
|
- containerPort: 8000
|
||||||
|
envFrom:
|
||||||
|
- configMapRef:
|
||||||
|
name: postamates-configmap
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: "512Mi"
|
||||||
|
cpu: "300m"
|
||||||
|
limits:
|
||||||
|
memory: "512Mi"
|
||||||
|
cpu: "300m"
|
||||||
|
# readinessProbe:
|
||||||
|
# httpGet:
|
||||||
|
# path: /healthz
|
||||||
|
# port: 3000
|
||||||
|
# initialDelaySeconds: 3
|
||||||
|
# periodSeconds: 3
|
||||||
|
# livenessProbe:
|
||||||
|
# httpGet:
|
||||||
|
# path: /healthz
|
||||||
|
# port: 3000
|
||||||
|
# initialDelaySeconds: 3
|
||||||
|
# periodSeconds: 3
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: postamates-django
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app.kubernetes.io/name: postamates-django
|
||||||
|
ports:
|
||||||
|
- protocol: TCP
|
||||||
|
port: 8000
|
||||||
|
targetPort: 8000
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: postamates-django
|
||||||
|
namespace: spatial
|
||||||
|
spec:
|
||||||
|
ingressClassName: nginx-internal
|
||||||
|
rules:
|
||||||
|
- host: ADDRESS_INGRESS_HOST
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- backend:
|
||||||
|
service:
|
||||||
|
name: postamates-django
|
||||||
|
port:
|
||||||
|
number: 8000
|
||||||
|
path: /api/
|
||||||
|
pathType: ImplementationSpecific
|
||||||
|
- backend:
|
||||||
|
service:
|
||||||
|
name: postamates-django
|
||||||
|
port:
|
||||||
|
number: 8000
|
||||||
|
path: /admin/
|
||||||
|
pathType: ImplementationSpecific
|
||||||
|
- backend:
|
||||||
|
service:
|
||||||
|
name: postamates-django
|
||||||
|
port:
|
||||||
|
number: 8000
|
||||||
|
path: /accounts/
|
||||||
|
pathType: ImplementationSpecific
|
||||||
|
- backend:
|
||||||
|
service:
|
||||||
|
name: postamates-django
|
||||||
|
port:
|
||||||
|
number: 8000
|
||||||
|
path: /django_static/
|
||||||
|
pathType: ImplementationSpecific
|
||||||
@ -0,0 +1,64 @@
|
|||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: martin
|
||||||
|
namespace: spatial
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: martin
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: martin
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: martin
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: martin
|
||||||
|
image: urbica/martin:pr-368
|
||||||
|
ports:
|
||||||
|
- containerPort: 3000
|
||||||
|
# ------------------------
|
||||||
|
env:
|
||||||
|
- name: DANGER_ACCEPT_INVALID_CERTS
|
||||||
|
value: "true"
|
||||||
|
- name: WATCH_MODE
|
||||||
|
value: "true"
|
||||||
|
- name: DATABASE_URL
|
||||||
|
value: "postgres://martin-user:PSQL_PASSWORD@PSQL_HOST:6432/martin_db"
|
||||||
|
# ------------------------
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: "64Mi"
|
||||||
|
cpu: "50m"
|
||||||
|
limits:
|
||||||
|
memory: "64Mi"
|
||||||
|
cpu: "50m"
|
||||||
|
# ------------------------
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /healthz
|
||||||
|
port: 3000
|
||||||
|
initialDelaySeconds: 3
|
||||||
|
periodSeconds: 3
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /healthz
|
||||||
|
port: 3000
|
||||||
|
initialDelaySeconds: 3
|
||||||
|
periodSeconds: 3
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: martin
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app.kubernetes.io/name: martin
|
||||||
|
ports:
|
||||||
|
- protocol: TCP
|
||||||
|
port: 3000
|
||||||
|
targetPort: 3000
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: postamates-worker
|
||||||
|
namespace: spatial
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: postamates-worker
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: postamates-worker
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: postamates-worker
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: worker
|
||||||
|
image: DEPLOY_IMAGE_TAG
|
||||||
|
command: ["sh", "-c", "celery -A postamates.celery:app worker"]
|
||||||
|
envFrom:
|
||||||
|
- configMapRef:
|
||||||
|
name: postamates-configmap
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: "512Mi"
|
||||||
|
cpu: "50m"
|
||||||
|
limits:
|
||||||
|
memory: "512Mi"
|
||||||
|
cpu: "50m"
|
||||||
Loading…
Reference in new issue