100 lines
2.4 KiB
Bash
100 lines
2.4 KiB
Bash
#!/bin/bash
|
||
|
||
# 服务部署脚本
|
||
# 用于停止旧服务并重新启动服务
|
||
# 使用方法: ./deploy.sh [0] (带0参数时不拉取代码)
|
||
|
||
echo "=== 服务部署脚本 ==="
|
||
echo "此脚本将停止当前服务并重新启动服务"
|
||
echo ""
|
||
|
||
# 检查是否跳过git pull
|
||
SKIP_GIT_PULL=0
|
||
if [ "$1" = "0" ]; then
|
||
SKIP_GIT_PULL=1
|
||
echo "跳过代码拉取,直接部署"
|
||
else
|
||
echo "默认执行代码拉取"
|
||
fi
|
||
|
||
# 如果不跳过git pull,则拉取最新代码
|
||
if [ $SKIP_GIT_PULL -eq 0 ]; then
|
||
echo ""
|
||
echo "正在拉取最新代码..."
|
||
|
||
# 读取gitea用户名和密码
|
||
echo -n "请输入gitea用户名: "
|
||
read -r GIT_USERNAME
|
||
echo -n "请输入gitea密码: "
|
||
read -s GIT_PASSWORD
|
||
echo ""
|
||
|
||
# 直接使用URL中的用户名密码进行拉取
|
||
git_url=$(git remote get-url origin)
|
||
if [[ $git_url == http* ]]; then
|
||
# 如果是http/https URL,替换为包含用户名密码的URL
|
||
git_url_with_auth=$(echo $git_url | sed "s|https://|https://$GIT_USERNAME:$GIT_PASSWORD@|")
|
||
git pull $git_url_with_auth main
|
||
else
|
||
# 如果是ssh或其他格式,使用expect或者让git自动处理
|
||
echo "使用凭据拉取代码..."
|
||
git pull origin main
|
||
fi
|
||
|
||
if [ $? -eq 0 ]; then
|
||
echo "✓ 代码拉取成功"
|
||
else
|
||
echo "✗ 代码拉取失败"
|
||
echo "是否继续部署? (y/n)"
|
||
read -r CONTINUE_DEPLOY
|
||
if [ "$CONTINUE_DEPLOY" != "y" ] && [ "$CONTINUE_DEPLOY" != "Y" ]; then
|
||
echo "部署已取消"
|
||
exit 1
|
||
fi
|
||
fi
|
||
fi
|
||
|
||
# 读取sudo密码
|
||
echo ""
|
||
echo -n "请输入sudo密码: "
|
||
read -s SUDO_PASSWORD
|
||
echo ""
|
||
echo ""
|
||
|
||
# 检查密码是否为空
|
||
if [ -z "$SUDO_PASSWORD" ]; then
|
||
echo "错误: 密码不能为空"
|
||
exit 1
|
||
fi
|
||
|
||
echo "正在停止当前服务..."
|
||
# 使用expect或者直接传递密码给sudo
|
||
echo "$SUDO_PASSWORD" | sudo -S docker compose down --rmi all
|
||
|
||
if [ $? -eq 0 ]; then
|
||
echo "✓ 服务已成功停止"
|
||
else
|
||
echo "✗ 停止服务失败,请检查密码是否正确"
|
||
exit 1
|
||
fi
|
||
|
||
echo ""
|
||
echo "正在启动新服务..."
|
||
echo "$SUDO_PASSWORD" | sudo -S docker compose up -d
|
||
|
||
if [ $? -eq 0 ]; then
|
||
echo "✓ 服务启动成功"
|
||
echo ""
|
||
echo "服务状态:"
|
||
echo "$SUDO_PASSWORD" | sudo -S docker compose ps
|
||
else
|
||
echo "✗ 启动服务失败"
|
||
exit 1
|
||
fi
|
||
|
||
echo ""
|
||
echo "当前运行的Docker容器:"
|
||
echo "$SUDO_PASSWORD" | sudo -S docker ps
|
||
|
||
echo ""
|
||
echo "=== 部署完成 ===" |