diff --git a/deploy.sh b/deploy.sh index 787736e..6c48376 100644 --- a/deploy.sh +++ b/deploy.sh @@ -24,14 +24,24 @@ fi # 更新Docker Buildx到最新版本 echo "更新Docker Buildx..." - # 卸载旧版本 - docker buildx uninstall 2>/dev/null || true - # 安装最新版本 - docker buildx install - # 创建并使用默认构建器 - docker buildx create --name mybuilder --use 2>/dev/null || true - # 重启Docker服务以应用更改 - systemctl restart docker 2>/dev/null || true + # 检查当前Buildx版本 + buildx_version=$(docker buildx version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+' | head -1) + if [[ "$buildx_version" < "0.17" ]]; then + echo "当前Buildx版本 $buildx_version 低于要求的0.17,正在升级..." + # 卸载旧版本 + docker buildx uninstall 2>/dev/null || true + # 安装最新版本 + docker buildx install + # 重启Docker服务以应用更改 + systemctl restart docker 2>/dev/null || true + # 等待Docker重启 + sleep 5 + # 创建并使用默认构建器 + docker buildx create --name mybuilder --use 2>/dev/null || true + fi + # 验证Buildx版本 + new_buildx_version=$(docker buildx version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+' | head -1) + echo "当前Buildx版本: $new_buildx_version" echo "Docker工具检查完成" @@ -41,37 +51,51 @@ fi # 处理代码仓库或更新代码 echo "处理代码仓库..." - if [ ! -d /opt/project_app/.git ]; then - # 如果目录不存在.git文件夹,检查目录是否为空 - if [ "$(ls -A /opt/project_app)" ]; then - # 目录不为空,创建临时目录克隆后复制文件 - echo "目标目录已存在且不为空,使用临时目录克隆代码..." - git clone http://8.137.125.67:4000/Swt29/Project_app.git /tmp/project_app_temp - # 复制.git文件夹和所有文件 - cp -r /tmp/project_app_temp/. /opt/project_app/ - # 清理临时目录 - rm -rf /tmp/project_app_temp + REPO_URL="http://8.137.125.67:4000/Swt29/Project_app.git" + BRANCH="BOSS" + + # 测试仓库连接 + if ! git ls-remote $REPO_URL &> /dev/null; then + echo "警告: 无法连接到Gitea仓库 $REPO_URL (端口4000拒绝连接)" + echo "请检查网络连接和仓库地址是否正确" + echo "如果仓库不可用,将使用本地已有代码继续部署..." + else + if [ ! -d /opt/project_app/.git ]; then + # 如果目录不存在.git文件夹,检查目录是否为空 + if [ "$(ls -A /opt/project_app)" ]; then + # 目录不为空,创建临时目录克隆后复制文件 + echo "目标目录已存在且不为空,使用临时目录克隆代码..." + git clone -b $BRANCH $REPO_URL /tmp/project_app_temp + if [ $? -eq 0 ]; then + # 复制.git文件夹和所有文件 + cp -r /tmp/project_app_temp/. /opt/project_app/ + # 清理临时目录 + rm -rf /tmp/project_app_temp + else + echo "警告: 克隆仓库失败,将使用本地已有代码继续部署..." + fi + else + # 目录为空,直接克隆仓库 + git clone -b $BRANCH $REPO_URL /opt/project_app + fi + cd /opt/project_app else - # 目录为空,直接克隆仓库 - git clone http://8.137.125.67:4000/Swt29/Project_app.git /opt/project_app + # 如果目录已存在.git文件夹,则更新代码 + cd /opt/project_app + # 使用fast-forward方式更新,避免分支冲突 + git fetch origin $BRANCH + git merge --ff-only FETCH_HEAD || { + echo "分支冲突,重置本地分支到远程最新版本..." + git reset --hard origin/$BRANCH + } fi - cd /opt/project_app - else - # 如果目录已存在.git文件夹,则更新代码 - cd /opt/project_app - # 使用fast-forward方式更新,避免分支冲突 - git fetch origin BOSS - git merge --ff-only FETCH_HEAD || { - echo "分支冲突,重置本地分支到远程最新版本..." - git reset --hard origin/BOSS - } + + # 确保有必要的配置文件 + echo "确保配置文件存在..." + git fetch origin $BRANCH + git checkout origin/$BRANCH -- docker-compose.yml Dockerfile 2>/dev/null || true fi - # 确保有必要的配置文件 - echo "确保配置文件存在..." - git fetch origin BOSS - git checkout origin/BOSS -- docker-compose.yml Dockerfile 2>/dev/null || true - # 检查.env文件是否存在 echo "检查环境变量配置..." if [ ! -f .env ]; then