Skip to content

Instantly share code, notes, and snippets.

@webislife
Created April 19, 2019 10:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save webislife/f47432bfb8dd3a2197143a9a203fcd58 to your computer and use it in GitHub Desktop.
Save webislife/f47432bfb8dd3a2197143a9a203fcd58 to your computer and use it in GitHub Desktop.
#!/bin/bash
#params $1 - user $2 - host - $3 - nginx path $4-app\path $5-SSH_KEY $6 - ENV
#Присваиваем аргументы переменным
CI_USER=$1 #пользователь от имени которого логинимся
STAGE_HOST=$2 #host куда коннектимся
NGINX_PATH=$3 #путь к nginx конфигу
APP_PATH=$4 #путь к приложению
ENV=$6 #имя окружения
SSH_KEY=$5 #SSH PRIVATE KEY
#Шаманство с ssh агентом, создаем known_hosts, запускаем агента, добавляем ключик
mkdir -p ~/.ssh
touch ~/.ssh/known_hosts
chmod 644 ~/.ssh/known_hosts
chmod 700 ~/.ssh
echo $(ssh-keyscan $STAGE_HOST) > ~/.ssh/known_hosts
eval `ssh-agent -s`
echo "$SSH_KEY" | tr -d '\r' | ssh-add - > /dev/null
#Активный цвет, этот тот цвет, который сейчас показывает NGINX
STAGE_COLOR="GREEN"
#Значение активного цвета хранится в самом nginx конфиге
ACTIVE_COLOR=$(ssh -t $CI_USER@$STAGE_HOST "sed -n '1p' $NGINX_PATH | sed 's/#//g' | tr -d '\n'")
echo "Active color $ACTIVE_COLOR"
if [ "$STAGE_COLOR" == "$ACTIVE_COLOR" ]; then
STAGE_COLOR=BLUE
ACTIVE_SSR=NODE_SSR_GREEN
ACTIVE_ROOT=app-GREEN
else
STAGE_COLOR=GREEN
ACTIVE_SSR=NODE_SSR_BLUE
ACTIVE_ROOT=app-BLUE
fi
echo "Stage color: $STAGE_COLOR"
echo "Обновляем исходники www/app-$STAGE_COLOR"
##Закачиваем новые файлы, изменения удаляем
rsync --delete-before --recursive --verbose --exclude node_modules --exclude .git --exclude logs ./ $CI_USER@$STAGE_HOST:$APP_PATH/app-$STAGE_COLOR
## Тушим stage color
echo "Тушим SSR_$STAGE_COLOR и GATEWAY_$STAGE_COLOR"
##С помощью pm2 удаляем инстанс ноды нашего stage цвета
ssh -t $CI_USER@$STAGE_HOST "pm2 del GATE_$STAGE_COLOR"
ssh -t $CI_USER@$STAGE_HOST "pm2 del SSR_$STAGE_COLOR"
echo "Обновляем yarn $STAGE_COLOR"
#Обновляем зависомосмти yarn
ssh -t $CI_USER@$STAGE_HOST "cd $APP_PATH/app-$STAGE_COLOR && yarn install"
##Поднимаем stage color
#ssr
echo "Запускаем SSR_$STAGE_COLOR"
ssh -t $CI_USER@$STAGE_HOST "cd $APP_PATH/app-$STAGE_COLOR && APP_ENV=$ENV pm2 start config/pm2.config.js --env $ENV --only SSR_$STAGE_COLOR"
##Меняем цвет в NGINX конфиге
#Меняем gateway
#Меняем ssr
echo "Меняем ssr в nginx NODE_SSR_$STAGE_COLOR"
ssh -t $CI_USER@$STAGE_HOST "sed -i \"s/ACTIVE_SSR[[:space:]]$ACTIVE_SSR/ACTIVE_SSR\\ NODE_SSR_$STAGE_COLOR/\" $NGINX_PATH"
#Меняем root
echo "Меняем root path в nginx на app-$STAGE_COLOR"
ssh -t $CI_USER@$STAGE_HOST "sed -i \"s/$ACTIVE_ROOT/app-$STAGE_COLOR/\" $NGINX_PATH"
#Меняем верхний комментарий #GREEN -> #BLUE
echo "Меняем #comment в nginx"
ssh -t $CI_USER@$STAGE_HOST "sed -i "1c\\\#$STAGE_COLOR" $NGINX_PATH"
#Рестартим NGINX
ssh -t $CI_USER@$STAGE_HOST "sudo /usr/sbin/service nginx reload"
echo "Deploy завершен за $SECONDS с."
exit 0
@GL-cpu
Copy link

GL-cpu commented Mar 19, 2021

ви тупие. у вас нет никаких файлов по скретчу!!!!!!!!!!!!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment