Feature/cicd

dev
Igor Egrorov 3 years ago
parent 78914f40ba
commit 7e8b2223eb

@ -1,4 +1,5 @@
.gitignore
.gitlab-ci.yml
README.md
.git/*
.git
docker-compose.yml

@ -1,48 +1,98 @@
---
variables:
APP_NAME: postamates_front
IMAGE_NAME: $CI_REGISTRY_IMAGE
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
- deploy
.build: &build-common
build-docker:
stage: build
before_script:
- sudo docker login -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD $CI_REGISTRY
script:
- sudo docker pull $IMAGE_NAME:builder || true
- sudo docker pull $IMAGE_NAME:$CI_COMMIT_SHORT_SHA || true
- sudo docker build --cache-from $IMAGE_NAME:builder --memory=2000m --memory-swap=3000m --target builder --tag $IMAGE_NAME:builder .
- sudo docker push $IMAGE_NAME:builder
- sudo docker build --cache-from $IMAGE_NAME:builder --memory=2000m --memory-swap=3000m --tag $IMAGE_NAME:$IMAGE_TAG --build-arg REACT_APP_DOMAIN_URL=$REACT_APP_DOMAIN_URL --build-arg BUILDKIT_INLINE_CACHE=1 .
- sudo docker push $IMAGE_NAME:$IMAGE_TAG
tags:
- deploy-remote
- shell
script:
- >
docker build
--build-arg YC_CONTAINER_REGISTRY=${YC_CONTAINER_REGISTRY}
--build-arg VITE_API_URL="https://postnet.dev.selftech.ru"
-t ${DOCKER_IMAGE_TAG} .
- docker push ${DOCKER_IMAGE_TAG}
build-test-job:
<<: *build-common
deploy-dev-kuber:
extends: .deploy_base_kuber
variables:
IMAGE_TAG: $CI_COMMIT_SHORT_SHA
REACT_APP_DOMAIN_URL: https://$DOMAIN/
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:
- sudo docker login -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD $CI_REGISTRY
- sudo docker pull $IMAGE_NAME:$IMAGE_TAG
- KUBE_CONFIG=`echo ${CI_ENVIRONMENT_NAME}_kubeconfig`
- mkdir -p ${HOME}/.kube
- 'cat ${!KUBE_CONFIG} > ${HOME}/.kube/config'
- chmod -R 700 ${HOME}/.kube
script:
- id=$(sudo docker create $IMAGE_NAME:$IMAGE_TAG)
- sudo docker cp $id:/dist/. /home/toren332/sst_postamates_frontend/dist
- sudo docker rm -v $id
tags:
- deploy-remote
- sed -i "s|DEPLOY_IMAGE_TAG|${DOCKER_IMAGE_TAG}|g" ./deploy/front.yaml
- sed -i "s|ADDRESS_INGRESS_HOST|${INGRESS_HOST}|g" ./deploy/front.yaml
- kubectl apply -f ./deploy/front.yaml
dependencies: []
artifacts:
paths:
- ./deploy/front.yaml
expire_in: 1 week
when: manual
deploy-test-job:
<<: *deploy-common
variables:
IMAGE_TAG: $CI_COMMIT_SHORT_SHA
rules:
- if: $CI_COMMIT_BRANCH == "sst_main"
# variables:
# APP_NAME: postamates_front
# IMAGE_NAME: $CI_REGISTRY_IMAGE
# stages:
# - build
# - deploy
# .build: &build-common
# stage: build
# before_script:
# - sudo docker login -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD $CI_REGISTRY
# script:
# - sudo docker pull $IMAGE_NAME:builder || true
# - sudo docker pull $IMAGE_NAME:$CI_COMMIT_SHORT_SHA || true
# - sudo docker build --cache-from $IMAGE_NAME:builder --memory=2000m --memory-swap=3000m --target builder --tag $IMAGE_NAME:builder .
# - sudo docker push $IMAGE_NAME:builder
# - sudo docker build --cache-from $IMAGE_NAME:builder --memory=2000m --memory-swap=3000m --tag $IMAGE_NAME:$IMAGE_TAG --build-arg REACT_APP_DOMAIN_URL=$REACT_APP_DOMAIN_URL --build-arg BUILDKIT_INLINE_CACHE=1 .
# - sudo docker push $IMAGE_NAME:$IMAGE_TAG
# tags:
# - deploy-remote
# build-test-job:
# <<: *build-common
# variables:
# IMAGE_TAG: $CI_COMMIT_SHORT_SHA
# REACT_APP_DOMAIN_URL: https://$DOMAIN/
# rules:
# - if: $CI_COMMIT_BRANCH == "sst_main"
# .deploy: &deploy-common
# stage: deploy
# before_script:
# - sudo docker login -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD $CI_REGISTRY
# - sudo docker pull $IMAGE_NAME:$IMAGE_TAG
# script:
# - id=$(sudo docker create $IMAGE_NAME:$IMAGE_TAG)
# - sudo docker cp $id:/dist/. /home/toren332/sst_postamates_frontend/dist
# - sudo docker rm -v $id
# tags:
# - deploy-remote
# deploy-test-job:
# <<: *deploy-common
# variables:
# IMAGE_TAG: $CI_COMMIT_SHORT_SHA
# rules:
# - if: $CI_COMMIT_BRANCH == "sst_main"

@ -1,4 +1,5 @@
FROM node:16 as builder
ARG YC_CONTAINER_REGISTRY
FROM ${YC_CONTAINER_REGISTRY}/public/node:16 as builder
WORKDIR /usr/src/postamates_frontend
ENV NODE_OPTIONS=--max_old_space_size=4096
COPY package*.json ./
@ -8,5 +9,6 @@ COPY . .
ARG REACT_APP_DOMAIN_URL=https://${DOMAIN}/
RUN yarn build
FROM nginx:1.23-alpine
COPY --from=builder /usr/src/postamates_frontend/dist /dist
FROM ${YC_CONTAINER_REGISTRY}/public/nginx:1.23-alpine
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /usr/src/postamates_frontend/dist /usr/share/nginx/html

@ -0,0 +1,74 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: postamates-frontend
namespace: spatial
labels:
app.kubernetes.io/name: postamates-frontend
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: postamates-frontend
template:
metadata:
labels:
app.kubernetes.io/name: postamates-frontend
spec:
containers:
- name: nginx
image: DEPLOY_IMAGE_TAG
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "20m"
limits:
memory: "64Mi"
cpu: "20m"
readinessProbe:
httpGet:
path: /nginx-health
port: 8888
initialDelaySeconds: 3
periodSeconds: 3
livenessProbe:
httpGet:
path: /nginx-health
port: 8888
initialDelaySeconds: 3
periodSeconds: 3
---
apiVersion: v1
kind: Service
metadata:
name: postamates-frontend
namespace: spatial
spec:
selector:
app.kubernetes.io/name: postamates-frontend
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: postamates-frontend
namespace: spatial
spec:
ingressClassName: nginx-internal
rules:
- host: ADDRESS_INGRESS_HOST
http:
paths:
- backend:
service:
name: postamates-frontend
port:
number: 80
path: /
pathType: ImplementationSpecific

@ -0,0 +1,46 @@
server {
listen 80;
server_name _;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# root /usr/share/nginx/html;
# }
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
server {
listen 8888;
server_name _;
location /nginx-health {
return 200 "healthy\n";
access_log off;
}
}
Loading…
Cancel
Save