RODY/deploy.sh
552068321@qq.com 6f7de660aa first commit
2022-11-04 17:37:08 +08:00

78 lines
2.3 KiB
Bash

#! /bin/bash
: '
Usage:
USER=root PASSWORD=root ./deploy.sh 192.168.x.1,192.168.x.2
'
# auto gen by hoobit-core
PROJECT_NAME='demo'
INSTALL_PATH="/data/${PROJECT_NAME}"
CURRENT_COMMITID=`git rev-parse --verify HEAD`
ORIGIN=`git remote -v | grep origin | awk '{print $2}' | head -n 1`
CURRENT_BRANCH=`git rev-parse --abbrev-ref HEAD`
if [[ ${CURRENT_BRANCH} == "HEAD" ]]; then # checkout by commit-id
CURRENT_BRANCH=`git branch --contains ${CURRENT_COMMITID} | tail -n 1`
fi
if [[ ${CURRENT_BRANCH} =~ ^\*.* ]]; then
# default release branch is master, for fix github Checking out {commit_id} as master
CURRENT_BRANCH="master"
fi
function echoo {
echo -e "\033[32m$@\033[0m"
}
function mssh() {
sshpass -p ${PASSWORD} ssh -o StrictHostKeyChecking=no ${USER}@${host} $1
}
function deploy() {
for host in $(echo $1 | tr "," "\n")
do
echoo "deploy to ${host} ..."
isGitRepo=`mssh "[ -d ${INSTALL_PATH} ] && \
cd ${INSTALL_PATH} && \
git rev-parse --is-inside-work-tree" || echo $?`
if [[ "${isGitRepo}" != "true" ]]; then
echoo "not a git repo, first deploy ..."
mssh "sudo rm -rf ${INSTALL_PATH} && \
cd /data && \
git clone ${ORIGIN} ${INSTALL_PATH}"
fi
REMOTE_BRANCH=`mssh "cd ${INSTALL_PATH} && git branch | grep \* | cut -d ' ' -f2"`
if [[ ${REMOTE_BRANCH} != ${CURRENT_BRANCH} ]]; then
mssh "cd ${INSTALL_PATH} && \
git fetch -f origin ${CURRENT_BRANCH}:${CURRENT_BRANCH}"
else
mssh "cd ${INSTALL_PATH} && \
git pull origin ${CURRENT_BRANCH}"
fi
mssh "cd ${INSTALL_PATH} && \
git checkout ${CURRENT_BRANCH} && git checkout ${CURRENT_COMMITID}"
REMOTE_COMMITID=`mssh "cd ${INSTALL_PATH} && git rev-parse --verify HEAD"`
echoo "remote ${REMOTE_COMMITID}"
if [[ ${REMOTE_COMMITID} != ${CURRENT_COMMITID} ]]; then
echoo "deploy failed, please check. Maybe need push curent branch to origin."
exit 1
fi
mssh "cd ${INSTALL_PATH} && docker-compose down && docker-compose up -d"
done
}
echoo "deploy...\n\tbranch: ${CURRENT_BRANCH}\n\tcommitid: ${CURRENT_COMMITID}\n\torigin: ${ORIGIN}"
deploy $1