提交 dd337789 authored 作者: Andy's avatar Andy

34

上级 1f7c80fa
#!/bin/bash #!/bin/bash
install_dir="/home/ubuntu" install_dir="/home/bdvideo"
production_run_dir="$install_dir/install_projects" # production_run_dir="$install_dir/install_projects"
production_run_repo="git.wkwork.xyz/root/install_projects.git" # production_run_repo="git.wkwork.xyz/root/install_projects.git"
production_server_config_dir="$install_dir/production-server-config" # production_server_config_dir="$install_dir/production-server-config"
production_server_config_repo="git.wkwork.xyz/tiktok/production-server-config.git" # production_server_config_repo="git.wkwork.xyz/tiktok/production-server-config.git"
production_mysql_dir="$install_dir/production-mysql" # production_mysql_dir="$install_dir/production-mysql"
production_mysql_repo="git.wkwork.xyz/tiktok/production-mysql.git" # production_mysql_repo="git.wkwork.xyz/tiktok/production-mysql.git"
production_install_dir="$production_run_dir/production" # production_install_dir="$production_run_dir/production"
projects=( # projects=(
# 项目名 项目仓库 项目保存目录 # # 项目名 项目仓库 项目保存目录
"server git.wkwork.xyz/tiktok/production-server.git $install_dir/production-server" # "server git.wkwork.xyz/tiktok/production-server.git $install_dir/production-server"
"client git.wkwork.xyz/tiktok/production-client.git $install_dir/production-client" # "client git.wkwork.xyz/tiktok/production-client.git $install_dir/production-client"
) # )
if [ ! -d "$install_dir" ]; then if [ ! -d "$install_dir" ]; then
mkdir -p "$install_dir" mkdir -p "$install_dir"
...@@ -25,8 +25,8 @@ fi ...@@ -25,8 +25,8 @@ fi
cd $install_dir cd $install_dir
BRANCH_FILE_SUFFIX=".branch" # BRANCH_FILE_SUFFIX=".branch"
CREDENTIALS_FILE="$HOME/.git_credentials" # CREDENTIALS_FILE="$HOME/.git_credentials"
# 输出函数 # 输出函数
echo_content() { echo_content() {
...@@ -204,380 +204,380 @@ check_install_docker() { ...@@ -204,380 +204,380 @@ check_install_docker() {
} }
# 函数:解析项目信息 # # 函数:解析项目信息
get_project_info() { # get_project_info() {
local project_info="$1" # local project_info="$1"
local index="$2" # local index="$2"
IFS=' ' read -r -a project_array <<<"$project_info" # IFS=' ' read -r -a project_array <<<"$project_info"
echo "${project_array[$index]}" # echo "${project_array[$index]}"
} # }
# 函数:获取所有项目名称 # # 函数:获取所有项目名称
get_project_names() { # get_project_names() {
local names=() # local names=()
for project in "${projects[@]}"; do # for project in "${projects[@]}"; do
names+=("$(get_project_info "$project" 0)") # names+=("$(get_project_info "$project" 0)")
done # done
echo "${names[@]}" # echo "${names[@]}"
} # }
set_branches() { # set_branches() {
repo_dir=$1 # repo_dir=$1
repo_name=$2 # repo_name=$2
cd "$repo_dir" || exit 1 # cd "$repo_dir" || exit 1
# 获取当前分支 # # 获取当前分支
current_branch=$(git branch --show-current) # current_branch=$(git branch --show-current)
if [ -z "$current_branch" ]; then # if [ -z "$current_branch" ]; then
echo_content "red" "未能获取当前分支,可能项目没有被正确初始化为git仓库。" # echo_content "red" "未能获取当前分支,可能项目没有被正确初始化为git仓库。"
exit 1 # exit 1
fi # fi
git fetch # git fetch
# 获取所有远程分支 # # 获取所有远程分支
branches=$(git branch -r | sed 's/origin\///' | grep -v 'HEAD') # branches=$(git branch -r | sed 's/origin\///' | grep -v 'HEAD')
#打印当前分支名称 # #打印当前分支名称
branch_count=$(echo "$branches" | wc -l) # branch_count=$(echo "$branches" | wc -l)
if [ "$branch_count" -gt 1 ]; then # if [ "$branch_count" -gt 1 ]; then
echo_content "yellow" "$repo_name 项目:分支选择 (如继续使用 '$current_branch' 直接回车):" # echo_content "yellow" "$repo_name 项目:分支选择 (如继续使用 '$current_branch' 直接回车):"
# 显示分支列表 # # 显示分支列表
i=1 # i=1
for branch in $branches; do # for branch in $branches; do
echo "$i) $branch" # echo "$i) $branch"
i=$((i + 1)) # i=$((i + 1))
done # done
# 提示用户选择 # # 提示用户选择
read -p "请输入分支对应的数字 (回车保持当前分支: $current_branch): " input # read -p "请输入分支对应的数字 (回车保持当前分支: $current_branch): " input
# 如果用户直接按回车,保持当前分支 # # 如果用户直接按回车,保持当前分支
if [ -z "$input" ]; then # if [ -z "$input" ]; then
echo_content "yellow" "继续使用当前分支: $current_branch" # echo_content "yellow" "继续使用当前分支: $current_branch"
branch="$current_branch" # branch="$current_branch"
else # else
# 验证输入是否为有效的数字 # # 验证输入是否为有效的数字
if [[ "$input" =~ ^[0-9]+$ ]] && ((input >= 1 && input <= branch_count)); then # if [[ "$input" =~ ^[0-9]+$ ]] && ((input >= 1 && input <= branch_count)); then
selected_branch=$(echo "$branches" | sed -n "${input}p" | xargs) # selected_branch=$(echo "$branches" | sed -n "${input}p" | xargs)
echo_content "green" "你选择了分支: $selected_branch" # echo_content "green" "你选择了分支: $selected_branch"
# 切换到选定分支 # # 切换到选定分支
if git show-ref --verify --quiet "refs/heads/$selected_branch"; then # if git show-ref --verify --quiet "refs/heads/$selected_branch"; then
git checkout "$selected_branch" # 切换到本地分支 # git checkout "$selected_branch" # 切换到本地分支
else # else
git checkout -b "$selected_branch" "origin/$selected_branch" # 从远程分支创建并切换 # git checkout -b "$selected_branch" "origin/$selected_branch" # 从远程分支创建并切换
fi # fi
else # else
echo_content "red" "无效的输入,请重新运行脚本。" # echo_content "red" "无效的输入,请重新运行脚本。"
exit 1 # exit 1
fi # fi
fi # fi
fi # fi
} # }
updata_project() { # updata_project() {
repo_dir=$1 # repo_dir=$1
repo_name=$2 # repo_name=$2
set_branches $repo_dir $repo_name # set_branches $repo_dir $repo_name
cd "$repo_dir" || exit 1 # cd "$repo_dir" || exit 1
# 检查工作区是否有未提交的更改 # # 检查工作区是否有未提交的更改
if [[ -n $(git status --porcelain) ]]; then # if [[ -n $(git status --porcelain) ]]; then
git add . # git add .
git commit -m "Auto-commit: 保存当前变动" # git commit -m "Auto-commit: 保存当前变动"
fi # fi
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) # CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
# git pull origin "$CURRENT_BRANCH" # # git pull origin "$CURRENT_BRANCH"
git pull --rebase -X theirs origin "$CURRENT_BRANCH" # git pull --rebase -X theirs origin "$CURRENT_BRANCH"
if [ $? -ne 0 ]; then # if [ $? -ne 0 ]; then
echo_content "red" "更新代码失败,请手动检查冲突。" # echo_content "red" "更新代码失败,请手动检查冲突。"
else # else
echo_content "green" "代码更新完成。" # echo_content "green" "代码更新完成。"
fi # fi
} # }
# 函数:拉取项目代码 # # 函数:拉取项目代码
pull_project() { # pull_project() {
repo_url=$1 # repo_url=$1
repo_dir=$2 # repo_dir=$2
repo_name=$3 # repo_name=$3
# 检查凭据是否存在 # # 检查凭据是否存在
if [ -f "$CREDENTIALS_FILE" ]; then # if [ -f "$CREDENTIALS_FILE" ]; then
source "$CREDENTIALS_FILE" # source "$CREDENTIALS_FILE"
else # else
echo "请输入 Git 用户名:" # echo "请输入 Git 用户名:"
read -r -p "用户名: " git_username # read -r -p "用户名: " git_username
echo "请输入 Git 密码:" # echo "请输入 Git 密码:"
read -s -p "密码: " git_password # read -s -p "密码: " git_password
echo # 换行 # echo # 换行
# 询问是否保存凭据 # # 询问是否保存凭据
echo "是否保存凭据到 $CREDENTIALS_FILE 以便下次使用?" # echo "是否保存凭据到 $CREDENTIALS_FILE 以便下次使用?"
read -p "请选择(y/n): " save_credentials # read -p "请选择(y/n): " save_credentials
echo # 换行 # echo # 换行
if [ "$save_credentials" = "y" ]; then # if [ "$save_credentials" = "y" ]; then
echo "git_username=\"$git_username\"" >"$CREDENTIALS_FILE" # echo "git_username=\"$git_username\"" >"$CREDENTIALS_FILE"
echo "git_password=\"$git_password\"" >>"$CREDENTIALS_FILE" # echo "git_password=\"$git_password\"" >>"$CREDENTIALS_FILE"
chmod 600 "$CREDENTIALS_FILE" # 设置文件权限,仅用户可读写 # chmod 600 "$CREDENTIALS_FILE" # 设置文件权限,仅用户可读写
fi # fi
fi # fi
# 克隆私有仓库 # # 克隆私有仓库
repo="https://$git_username:$git_password@$repo_url" # repo="https://$git_username:$git_password@$repo_url"
echo_content "green" "克隆仓库 $repo ..." # echo_content "green" "克隆仓库 $repo ..."
git clone $repo "$repo_dir" # git clone $repo "$repo_dir"
if [ $? -ne 0 ]; then # if [ $? -ne 0 ]; then
rm $CREDENTIALS_FILE # rm $CREDENTIALS_FILE
echo_content "red" "克隆仓库失败,请检查仓库地址和凭据" # echo_content "red" "克隆仓库失败,请检查仓库地址和凭据"
pull_project $repo_url $repo_dir $repo_name # pull_project $repo_url $repo_dir $repo_name
fi # fi
set_branches $repo_dir $repo_name # set_branches $repo_dir $repo_name
} # }
# 函数:卸载项目 # # 函数:卸载项目
uninstall_project() { # uninstall_project() {
if [ -d "$install_dir" ]; then # if [ -d "$install_dir" ]; then
echo_content "yellow" "你确定要卸载项目吗?此操作将删除项目目录 '$install_dir' (y/n):" # echo_content "yellow" "你确定要卸载项目吗?此操作将删除项目目录 '$install_dir' (y/n):"
read -r confirm_uninstall # read -r confirm_uninstall
if [ "$confirm_uninstall" = "y" ]; then # if [ "$confirm_uninstall" = "y" ]; then
echo_content "green" "正在卸载项目..." # echo_content "green" "正在卸载项目..."
cd $production_install_dir # cd $production_install_dir
docker-compose down # docker-compose down
docker network rm production_mall_network # docker network rm production_mall_network
rm -rf "$install_dir" # 删除项目目录 # rm -rf "$install_dir" # 删除项目目录
if [ $? -eq 0 ]; then # if [ $? -eq 0 ]; then
echo_content "green" "项目已成功卸载。" # echo_content "green" "项目已成功卸载。"
else # else
echo_content "red" "卸载失败。" # echo_content "red" "卸载失败。"
fi # fi
else # else
echo_content "yellow" "卸载操作已取消。" # echo_content "yellow" "卸载操作已取消。"
fi # fi
else # else
echo_content "red" "项目目录不存在,无法卸载。" # echo_content "red" "项目目录不存在,无法卸载。"
fi # fi
} # }
# 函数:启动或重启项目 # # 函数:启动或重启项目
start_project() { # start_project() {
cd "$production_install_dir" || exit 1 # cd "$production_install_dir" || exit 1
rm nginx/nginx.conf # rm nginx/nginx.conf
rm -rf nginx/nginx.conf # rm -rf nginx/nginx.conf
cp nginx/nginx_clear_mysql.conf nginx/nginx.conf # cp nginx/nginx_clear_mysql.conf nginx/nginx.conf
echo_content "green" "是否要启动/重启 项目?(y/n):" # echo_content "green" "是否要启动/重启 项目?(y/n):"
read -r restart # read -r restart
if [ "$restart" = "y" ]; then # if [ "$restart" = "y" ]; then
if docker-compose ps | grep -q "Up"; then # if docker-compose ps | grep -q "Up"; then
# 定义服务列表 # # 定义服务列表
services=("mall-admin" "mall-api" "mall-data" "nginx" "mall-tools" "images_proxy") # services=("mall-admin" "mall-api" "mall-data" "nginx" "mall-tools" "images_proxy")
# 遍历服务列表 # # 遍历服务列表
for service in "${services[@]}"; do # for service in "${services[@]}"; do
# 检查容器是否已创建 # # 检查容器是否已创建
if docker ps -a --format '{{.Names}}' | grep -Eq "(${service}|_[a-zA-Z0-9]+_${service})$"; then # if docker ps -a --format '{{.Names}}' | grep -Eq "(${service}|_[a-zA-Z0-9]+_${service})$"; then
echo "docker-compose restart $service" # echo "docker-compose restart $service"
docker-compose restart "$service" # docker-compose restart "$service"
else # else
echo "docker-compose up -d $service" # echo "docker-compose up -d $service"
docker-compose up -d "$service" # docker-compose up -d "$service"
fi # fi
done # done
# docker-compose restart mall-admin mall-api mall-data nginx mall-tools go-nginx myiframe images_proxy proxy-mysql proxy-server # # docker-compose restart mall-admin mall-api mall-data nginx mall-tools go-nginx myiframe images_proxy proxy-mysql proxy-server
echo "重启中 预计 60秒左右启动成功 ..." # echo "重启中 预计 60秒左右启动成功 ..."
sleep 60 # sleep 60
else # else
docker-compose up -d # docker-compose up -d
echo "第一次启动 预计 150 秒左右启动成功 ..." # echo "第一次启动 预计 150 秒左右启动成功 ..."
sleep 100 # sleep 100
docker-compose restart mall-admin mall-api mall-data # docker-compose restart mall-admin mall-api mall-data
echo "重启中 预计 60秒左右启动成功 ..." # echo "重启中 预计 60秒左右启动成功 ..."
sleep 60 # sleep 60
fi # fi
fi # fi
} # }
# 函数:选择要更新的项目 # # 函数:选择要更新的项目
select_project() { # select_project() {
local project_names=($(get_project_names)) # local project_names=($(get_project_names))
# 判断项目数量 # # 判断项目数量
if [ ${#project_names[@]} -eq 1 ]; then # if [ ${#project_names[@]} -eq 1 ]; then
selected_project="${project_names[0]}" # selected_project="${project_names[0]}"
project_dir=$(get_project_info "${projects[0]}" 2) # project_dir=$(get_project_info "${projects[0]}" 2)
project_name=$(get_project_info "${projects[0]}" 0) # project_name=$(get_project_info "${projects[0]}" 0)
else # else
echo_content "yellow" "\n\n" # echo_content "yellow" "\n\n"
echo_content "yellow" "请选择要更新的的项目\n" # echo_content "yellow" "请选择要更新的的项目\n"
# 自定义 PS3 提示符 # # 自定义 PS3 提示符
PS3="请输入项目对应的数字:" # PS3="请输入项目对应的数字:"
select selected_project in "${project_names[@]}"; do # select selected_project in "${project_names[@]}"; do
if [ -n "$selected_project" ]; then # if [ -n "$selected_project" ]; then
for project in "${projects[@]}"; do # for project in "${projects[@]}"; do
if [ "$(get_project_info "$project" 0)" = "$selected_project" ]; then # if [ "$(get_project_info "$project" 0)" = "$selected_project" ]; then
project_dir=$(get_project_info "$project" 2) # project_dir=$(get_project_info "$project" 2)
project_name=$(get_project_info "$project" 0) # project_name=$(get_project_info "$project" 0)
break 2 # break 2
fi # fi
done # done
else # else
echo_content "red" "无效的选择,请重新选择。" # echo_content "red" "无效的选择,请重新选择。"
continue # continue
fi # fi
done # done
fi # fi
updata_project "$project_dir" "$project_name" # updata_project "$project_dir" "$project_name"
} # }
# 函数:选择要执行的操作 # # 函数:选择要执行的操作
select_operation() { # select_operation() {
echo_content "yellow" "请选择要执行的操作:" # echo_content "yellow" "请选择要执行的操作:"
PS3="请输入操作对应的数字:" # PS3="请输入操作对应的数字:"
select operation in "更新项目" "启动/重启【项目】" "启动/重启【mysql】" "对外开放【mysql】" "重置容器" "卸载" "退出"; do # select operation in "更新项目" "启动/重启【项目】" "启动/重启【mysql】" "对外开放【mysql】" "重置容器" "卸载" "退出"; do
case $REPLY in # case $REPLY in
1) # 1)
echo_content "green" "你选择了操作: 更新项目" # echo_content "green" "你选择了操作: 更新项目"
select_project # select_project
start_project # start_project
break # break
;; # ;;
2) # 2)
echo_content "green" "你选择了操作: 商城(启动/重启)" # echo_content "green" "你选择了操作: 商城(启动/重启)"
start_project # start_project
break # break
;; # ;;
3) # 3)
echo_content "green" "你选择了操作: 重启mysql" # echo_content "green" "你选择了操作: 重启mysql"
cd "$production_install_dir" || exit 1 # cd "$production_install_dir" || exit 1
docker-compose restart mysql # docker-compose restart mysql
break # break
;; # ;;
4) # 4)
echo_content "green" "对外开放【mysql】" # echo_content "green" "对外开放【mysql】"
cd "$production_install_dir" || exit 1 # cd "$production_install_dir" || exit 1
rm nginx/nginx.conf # rm nginx/nginx.conf
rm -rf nginx/nginx.conf # rm -rf nginx/nginx.conf
cp nginx/nginx_open_mysql.conf nginx/nginx.conf # cp nginx/nginx_open_mysql.conf nginx/nginx.conf
docker-compose rm -sf nginx # docker-compose rm -sf nginx
docker-compose up -d nginx # docker-compose up -d nginx
break # break
;; # ;;
5) # 5)
echo_content "green" "你选择了操作: 重置容器" # echo_content "green" "你选择了操作: 重置容器"
echo_content "green" "是否要启动/重启 项目?(y/n):" # echo_content "green" "是否要启动/重启 项目?(y/n):"
read -r restart # read -r restart
if [ "$restart" = "y" ]; then # if [ "$restart" = "y" ]; then
docker rm -f $(docker ps -aq) # docker rm -f $(docker ps -aq)
echo_content "green" "容器全部删除成功 请重启服务" # echo_content "green" "容器全部删除成功 请重启服务"
start_project # start_project
fi # fi
exit # exit
;; # ;;
6) # 6)
echo_content "green" "你选择了操作: 卸载" # echo_content "green" "你选择了操作: 卸载"
uninstall_project # uninstall_project
exit # exit
;; # ;;
7) # 7)
echo_content "green" "你选择了操作: 退出" # echo_content "green" "你选择了操作: 退出"
exit # exit
;; # ;;
*) # *)
echo_content "red" "无效的选择" # echo_content "red" "无效的选择"
continue # continue
;; # ;;
esac # esac
done # done
} # }
# 函数: 初始化脚本 检查环境 # # 函数: 初始化脚本 检查环境
init_environment_check() { # init_environment_check() {
if [ ! -d "$production_run_dir/.git" ]; then # if [ ! -d "$production_run_dir/.git" ]; then
# 运行相关逻辑,找到匹配项后可立即处理 # # 运行相关逻辑,找到匹配项后可立即处理
echo_content "green" "拉取项目: production_run" # echo_content "green" "拉取项目: production_run"
echo_content "green" "项目仓库: $production_run_repo" # echo_content "green" "项目仓库: $production_run_repo"
echo_content "green" "项目目录: $production_run_dir" # echo_content "green" "项目目录: $production_run_dir"
pull_project "$production_run_repo" "$production_run_dir" "production_run" # pull_project "$production_run_repo" "$production_run_dir" "production_run"
else # else
echo_content "green" "更新项目: production_run" # echo_content "green" "更新项目: production_run"
echo_content "green" "项目仓库: $production_run_repo" # echo_content "green" "项目仓库: $production_run_repo"
echo_content "green" "项目目录: $production_run_dir" # echo_content "green" "项目目录: $production_run_dir"
updata_project "$production_run_dir" "production_run" # updata_project "$production_run_dir" "production_run"
fi # fi
if [ ! -d "$production_mysql_dir/.git" ]; then # if [ ! -d "$production_mysql_dir/.git" ]; then
# 运行相关逻辑,找到匹配项后可立即处理 # # 运行相关逻辑,找到匹配项后可立即处理
echo_content "green" "拉取项目: production_mysql" # echo_content "green" "拉取项目: production_mysql"
echo_content "green" "项目仓库: $production_mysql_repo" # echo_content "green" "项目仓库: $production_mysql_repo"
echo_content "green" "项目目录: $production_mysql_dir" # echo_content "green" "项目目录: $production_mysql_dir"
pull_project "$production_mysql_repo" "$production_mysql_dir" "服务端配置" # pull_project "$production_mysql_repo" "$production_mysql_dir" "服务端配置"
cd "$production_mysql_dir/mysql" # cd "$production_mysql_dir/mysql"
unzip data.zip # unzip data.zip
# else # # else
# echo_content "green" "更新项目: production_mysql" # # echo_content "green" "更新项目: production_mysql"
# echo_content "green" "项目仓库: $production_mysql_repo" # # echo_content "green" "项目仓库: $production_mysql_repo"
# echo_content "green" "项目目录: $production_mysql_dir" # # echo_content "green" "项目目录: $production_mysql_dir"
# updata_project "$production_mysql_dir" "production_mysql" # # updata_project "$production_mysql_dir" "production_mysql"
fi # fi
if [ ! -d "$production_server_config_dir/.git" ]; then # if [ ! -d "$production_server_config_dir/.git" ]; then
# 运行相关逻辑,找到匹配项后可立即处理 # # 运行相关逻辑,找到匹配项后可立即处理
echo_content "green" "拉取项目: 服务端配置文件" # echo_content "green" "拉取项目: 服务端配置文件"
echo_content "green" "项目仓库: $production_server_config_repo" # echo_content "green" "项目仓库: $production_server_config_repo"
echo_content "green" "项目目录: $production_server_config_dir" # echo_content "green" "项目目录: $production_server_config_dir"
pull_project "$production_server_config_repo" "$production_server_config_dir" "服务端配置" # pull_project "$production_server_config_repo" "$production_server_config_dir" "服务端配置"
else # else
echo_content "green" "更新项目: 服务端配置文件" # echo_content "green" "更新项目: 服务端配置文件"
echo_content "green" "项目仓库: $production_server_config_repo" # echo_content "green" "项目仓库: $production_server_config_repo"
echo_content "green" "项目目录: $production_server_config_dir" # echo_content "green" "项目目录: $production_server_config_dir"
updata_project "$production_server_config_dir" "服务端配置文件" # updata_project "$production_server_config_dir" "服务端配置文件"
fi # fi
get_project_names # get_project_names
for project in "${projects[@]}"; do # for project in "${projects[@]}"; do
# 获取项目信息 # # 获取项目信息
project_name=$(get_project_info "$project" 0) # project_name=$(get_project_info "$project" 0)
project_repo=$(get_project_info "$project" 1) # project_repo=$(get_project_info "$project" 1)
project_dir=$(get_project_info "$project" 2) # project_dir=$(get_project_info "$project" 2)
# 检查项目目录中是否存在 .git 目录(即项目是否已拉取) # # 检查项目目录中是否存在 .git 目录(即项目是否已拉取)
if [ ! -d "$project_dir/.git" ]; then # if [ ! -d "$project_dir/.git" ]; then
# 如果项目未被拉取,执行拉取操作 # # 如果项目未被拉取,执行拉取操作
echo_content "green" "拉取项目: $project_name" # echo_content "green" "拉取项目: $project_name"
echo_content "green" "项目仓库: $project_repo" # echo_content "green" "项目仓库: $project_repo"
echo_content "green" "项目目录: $project_dir" # echo_content "green" "项目目录: $project_dir"
# 调用 pull_project 函数进行项目拉取 # # 调用 pull_project 函数进行项目拉取
pull_project "$project_repo" "$project_dir" "$project_name" # pull_project "$project_repo" "$project_dir" "$project_name"
fi # fi
# rm -rf "$production_run_dir/tomallmcat/" # # rm -rf "$production_run_dir/tomallmcat/"
# ln -s "$project_dir/$project_name" "$production_run_dir/$project_name" # # ln -s "$project_dir/$project_name" "$production_run_dir/$project_name"
done # done
} # }
# 更新分支函数 # 更新分支函数
update_branch() { update_branch() {
...@@ -632,9 +632,9 @@ clone_branch() { ...@@ -632,9 +632,9 @@ clone_branch() {
done done
} }
deal_svr() { deal_git_svr() {
REPO_URL=git@git.wkwork.xyz:LaunchDemo/0000_BD_Demo_Video_Svr.git REPO_URL="git@git.wkwork.xyz:LaunchDemo/0000_BD_Demo_Video_Svr.git"
BASE_DIR="./svr" BASE_DIR="./svr"
MAX_RETRY=3 # 最大重试次数 MAX_RETRY=3 # 最大重试次数
...@@ -656,11 +656,42 @@ deal_svr() { ...@@ -656,11 +656,42 @@ deal_svr() {
done done
} }
write_rsa(){ deal_git_web() {
REPO_URL="git@andy:LaunchDemo/0000_BD_Demo_Video_Web.git"
BASE_DIR="./svr"
MAX_RETRY=3 # 最大重试次数
BRANCHES=(
"main-admin"
"agent-admin"
"mobile"
"webgame"
"bank-client"
"bank-server"
"down"
)
# 主循环
for BRANCH in "${BRANCHES[@]}"; do
TARGET_DIR="$BASE_DIR/$BRANCH"
if [ -d "$TARGET_DIR/.git" ]; then
update_branch "$REPO_URL" "$BRANCH" "$TARGET_DIR"
else
clone_branch "$REPO_URL" "$BRANCH" "$TARGET_DIR"
fi
done
}
check_git_account() {
# 1. 检查 id_rsa 文件是否存在
if [ ! -f /root/.ssh/id_rsa ]; then
mkdir -p /root/.ssh mkdir -p /root/.ssh
chmod 700 /root/.ssh chmod 700 /root/.ssh
cat > /root/.ssh/id_rsa << 'EOF' cat >/root/.ssh/id_rsa <<'EOF'
-----BEGIN OPENSSH PRIVATE KEY----- -----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAACFwAAAAdzc2gtcn b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAACFwAAAAdzc2gtcn
NhAAAAAwEAAQAAAgEAz7r3WluTI/W0j8clFnT7U0KV/uzDt03MAEzQylu1+PC3vpnxx0Lj NhAAAAAwEAAQAAAgEAz7r3WluTI/W0j8clFnT7U0KV/uzDt03MAEzQylu1+PC3vpnxx0Lj
...@@ -712,7 +743,32 @@ CbqSBWOBXuEAAAASODg4ODg4ODhAZ21haWwuY29tAQ== ...@@ -712,7 +743,32 @@ CbqSBWOBXuEAAAASODg4ODg4ODhAZ21haWwuY29tAQ==
-----END OPENSSH PRIVATE KEY----- -----END OPENSSH PRIVATE KEY-----
EOF EOF
chmod 600 /root/.ssh/id_rsa chmod 600 /root/.ssh/id_rsa
echo "✅ id_rsa 写入成功"
else
echo "⚠️ /root/.ssh/id_rsa 已存在,未做修改"
fi
# 2. 检测 SSH 连接是否成功
echo "🧪 正在测试 SSH 连接..."
ssh -o StrictHostKeyChecking=no -T git@git.wkwork.xyz 2>&1 | grep "successfully authenticated" >/dev/null
if [ $? -eq 0 ]; then
echo "✅ SSH 连接成功 (已通过身份验证)"
return 1
else
echo "❌ SSH 连接失败 (请检查私钥与服务器)"
return 0
fi
# # 3. 测试 Git 仓库是否可以访问
# echo "🧪 正在测试 Git 仓库访问..."
# git ls-remote "$REPO_URL" &>/dev/null
# if [ $? -eq 0 ]; then
# echo "✅ Git 仓库连接成功"
# else
# echo "❌ Git 仓库连接失败 (请检查 REPO_URL 与权限)"
# exit 1
# fi
} }
...@@ -731,14 +787,20 @@ main() { ...@@ -731,14 +787,20 @@ main() {
check_install_unzip check_install_unzip
check_install_docker check_install_docker
echo_content "green" " 2. 写入git账户" echo_content "green" " 2. 测试git账户"
write_rsa if check_git_account; then
echo "🔗 SSH 连接正常"
# echo_content "green" " 2. 获取更新" else
echo "⚠️ SSH 连接失败,退出"
exit 1
fi
echo_content "green" " 3. 获取更新" echo_content "green" " 3. 获取更新"
cd $install_dir cd $install_dir
deal_svr echo_content "blue" "获取 svr"
deal_git_svr
echo_content "blue" "获取 web"
deal_git_web
# init_environment_check # init_environment_check
# select_operation # select_operation
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论