parent
63075aad00
commit
a45cd6ebb2
@ -1,7 +1,10 @@
|
||||
.gitignore
|
||||
.gitlab/*
|
||||
.gitlab-ci.yml
|
||||
README.md
|
||||
.git/*
|
||||
.pre-commit-config.yaml
|
||||
.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:
|
||||
- build
|
||||
- lint
|
||||
# - lint
|
||||
- deploy
|
||||
|
||||
variables:
|
||||
CONTAINERS_NAME: sst_postamates
|
||||
IMAGE_NAME: $CI_REGISTRY_IMAGE
|
||||
|
||||
default:
|
||||
build-docker:
|
||||
stage: build
|
||||
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:
|
||||
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'
|
||||
INGRESS_HOST: "postnet.dev.selftech.ru"
|
||||
tags:
|
||||
- docker
|
||||
environment:
|
||||
name: dev
|
||||
|
||||
.deploy: &deploy-common
|
||||
.deploy_base_kuber:
|
||||
image: ${YC_CONTAINER_REGISTRY}/public/helm-kubectl-git:1.0.0
|
||||
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
|
||||
- KUBE_CONFIG=`echo ${CI_ENVIRONMENT_NAME}_kubeconfig`
|
||||
- mkdir -p ${HOME}/.kube
|
||||
- 'cat ${!KUBE_CONFIG} > ${HOME}/.kube/config'
|
||||
- chmod -R 700 ${HOME}/.kube
|
||||
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
|
||||
- sed -i "s|DEPLOY_IMAGE_TAG|${DOCKER_IMAGE_TAG}|g" ./deploy/django.yml
|
||||
- sed -i "s|ADDRESS_INGRESS_HOST|${INGRESS_HOST}|g" ./deploy/django.yml
|
||||
- sed -i "s|DEPLOY_IMAGE_TAG|${DOCKER_IMAGE_TAG}|g" ./deploy/worker.yml
|
||||
- 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:
|
||||
<<: *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'
|
||||
# variables:
|
||||
# CONTAINERS_NAME: sst_postamates
|
||||
# IMAGE_NAME: $CI_REGISTRY_IMAGE
|
||||
|
||||
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
|
||||
# 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
|
||||
# - 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
|
||||
|
||||
ENV PYTHONUNBUFFERED 1
|
||||
|
||||
RUN mkdir /code
|
||||
|
||||
WORKDIR /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/
|
||||
|
||||
@ -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