提交 19059fdb authored 作者: Andy's avatar Andy

12

上级 f374ce34
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
# 如何删除GIT中的.DS_Store
# (https://www.jianshu.com/p/fdaa8be7f6c3)
\ No newline at end of file
#!/bin/bash
install_dir="/home/bdvideo"
if [ ! -d "$install_dir" ]; then
mkdir -p "$install_dir"
fi
cd $install_dir
# 输出函数
echo_content() {
ECHO_TYPE="echo -e"
case $1 in
"red")
${ECHO_TYPE} "\033[31m$2\033[0m"
;;
"green")
${ECHO_TYPE} "\033[32m$2\033[0m"
;;
"yellow")
${ECHO_TYPE} "\033[33m$2\033[0m"
;;
"blue")
${ECHO_TYPE} "\033[34m$2\033[0m"
;;
"purple")
${ECHO_TYPE} "\033[35m$2\033[0m"
;;
"skyBlue")
${ECHO_TYPE} "\033[36m$2\033[0m"
;;
"white")
${ECHO_TYPE} "\033[37m$2\033[0m"
;;
esac
}
# 函数:检查并安装 Git
check_install_git() {
echo_content "green" "🔍 检测 Git 是否已安装..."
if command -v git >/dev/null 2>&1; then
echo "✅ Git 已安装,版本:$(git --version)"
else
echo "❌ Git 未安装,正在安装 Git..."
sudo apt update
sudo apt install -y git
if command -v git >/dev/null 2>&1; then
echo "✅ Git 安装成功,版本:$(git --version)"
else
echo "❌ Git 安装失败,请检查网络或手动安装。"
exit 1
fi
fi
echo "🎉 Git 检测与安装完成!"
}
check_install_NodeJs() {
echo_content "green" "🔍 正在检测 Node.js 是否已安装..."
if command -v node >/dev/null 2>&1; then
echo "✅ Node.js 已安装,版本:$(node -v)"
else
echo "❌ 未检测到 Node.js,正在安装 Node.js 20.x..."
# 更新系统包索引
sudo apt update
# 下载并执行 NodeSource 安装脚本
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
# 安装 Node.js
sudo apt install -y nodejs
# 检查安装是否成功
if command -v node >/dev/null 2>&1; then
echo "✅ Node.js 安装成功,版本:$(node -v)"
else
echo "❌ Node.js 安装失败,请检查网络或手动安装。"
exit 1
fi
fi
# 检测 npm 是否安装
if command -v npm >/dev/null 2>&1; then
echo "✅ npm 已安装,版本:$(npm -v)"
else
echo "❌ npm 未安装,尝试重新安装 Node.js 可能修复此问题。"
fi
}
check_install_PM2() {
echo_content "green" "🔍 检测 Node.js & PM2 是否已安装..."
echo_content "blue" " 🔍 检测 Node.js 是否已安装..."
if command -v node >/dev/null 2>&1; then
echo "✅ Node.js 已安装,版本:$(node -v)"
else
echo "❌ Node.js 未安装,正在安装 Node.js 20.x..."
sudo apt update
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
if command -v node >/dev/null 2>&1; then
echo "✅ Node.js 安装成功,版本:$(node -v)"
else
echo "❌ Node.js 安装失败,请检查网络。"
exit 1
fi
fi
echo_content "blue" " 🔍 检测 npm 是否已安装..."
if command -v npm >/dev/null 2>&1; then
echo "✅ npm 已安装,版本:$(npm -v)"
else
echo "❌ npm 未安装,尝试重新安装 Node.js 或手动安装 npm。"
exit 1
fi
echo_content "blue" " 🔍 检测 PM2 是否已安装..."
if command -v pm2 >/dev/null 2>&1; then
echo "✅ PM2 已安装,版本:$(pm2 -v)"
else
echo "❌ PM2 未安装,正在全局安装 PM2..."
sudo npm install -g pm2
if command -v pm2 >/dev/null 2>&1; then
echo "✅ PM2 安装成功,版本:$(pm2 -v)"
else
echo "❌ PM2 安装失败,请检查 npm 环境。"
exit 1
fi
fi
echo "🎉 Node.js & PM2 环境准备完成!"
}
check_install_unzip() {
if ! command -v unzip &>/dev/null; then
if command -v apt &>/dev/null; then
sudo apt update
sudo apt install -y unzip
elif command -v yum &>/dev/null; then
sudo yum install -y unzip
fi
fi
}
# 函数:检查并安装 Docker
check_install_docker() {
echo_content "green" "检查并安装 Docker..."
if ! [[ $(docker -v 2>/dev/null) ]]; then
sh <(curl -sL https://get.docker.com)
fi
if ! [[ $(docker -v 2>/dev/null) ]]; then
curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
fi
if ! [[ $(docker -v 2>/dev/null) ]]; then
curl -sSL https://get.daocloud.io/docker | sh
fi
#!/bin/bash
if ! command -v docker-compose &>/dev/null; then
# 下载 docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 设置执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 检查是否安装成功
if ! command -v docker-compose &>/dev/null; then
echo "docker-compose 安装失败。"
exit 1
fi
fi
}
# 更新分支函数
update_branch() {
local repo_url=$1
local branch=$2
local target_dir=$3
echo "Updating branch '$branch' in '$target_dir'..."
cd "$target_dir" || return 1
git checkout "$branch" >/dev/null 2>&1
git fetch origin "$branch"
local_commit=$(git rev-parse "$branch")
remote_commit=$(git rev-parse "origin/$branch")
if [ "$local_commit" = "$remote_commit" ]; then
echo "✅ Branch '$branch' is up-to-date."
else
echo "⬇️ Branch '$branch' has updates. Pulling changes..."
RETRY=0
until git pull origin "$branch"; do
RETRY=$((RETRY + 1))
if [ "$RETRY" -ge "$MAX_RETRY" ]; then
echo "❌ Failed to update '$branch' after $MAX_RETRY attempts."
break
fi
echo "Retrying pull for '$branch' ($RETRY/$MAX_RETRY)..."
sleep 2
done
fi
cd - >/dev/null
}
# 克隆分支函数
clone_branch() {
local repo_url=$1
local branch=$2
local target_dir=$3
echo "Cloning branch '$branch' into '$target_dir'..."
RETRY=0
until git clone --branch "$branch" --single-branch "$repo_url" "$target_dir"; do
RETRY=$((RETRY + 1))
if [ "$RETRY" -ge "$MAX_RETRY" ]; then
echo "❌ Failed to clone '$branch' after $MAX_RETRY attempts."
break
fi
echo "Retrying clone for '$branch' ($RETRY/$MAX_RETRY)..."
sleep 2
done
}
fetch_git_svr() {
REPO_URL="git@git.wkwork.xyz:LaunchDemo/0000_BD_Demo_Video_Svr.git"
BASE_DIR="./svr"
MAX_RETRY=3 # 最大重试次数
BRANCHES=(
"docker-base"
"docker-game"
"docker-proxy"
"bdvideo"
)
# 主循环
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
}
fetch_git_web() {
REPO_URL="git@git.wkwork.xyz:LaunchDemo/0000_BD_Demo_Video_Web.git"
BASE_DIR="./web"
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
chmod 700 /root/.ssh
cat >/root/.ssh/id_rsa <<'EOF'
-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----
EOF
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 0
# else
# echo "❌ SSH 连接失败 (请检查私钥与服务器)"
# return 1
# fi
echo "🧪 测试 SSH 连接..."
RESULT=$(ssh -o StrictHostKeyChecking=no git@git.wkwork.xyz 2>&1)
echo "$RESULT"
if echo "$RESULT" | grep -q "Welcome to GitLab"; then
echo "✅ SSH 连接成功"
return 0
else
echo "❌ SSH 连接失败"
return 1
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
}
run_docker() {
cd ./svr/docker-base || exit
make addnet
make up
chmod 777 ../tmp/base/etcd/data
chmod 777 ../tmp/base/zookeeper/data
make up
cd ../..
cd ./svr/docker-proxy || exit
make up
cd ../..
}
run_service() {
cd ./svr/bdvideo || exit
make export_env
make ffmpeg
make start
cd ../..
}
# main
main() {
#!/bin/bash
pause() {
read -rp "按回车键继续..."
}
while true; do
clear
echo_content "skyBlue" "============================"
echo_content "skyBlue" " 主菜单 "
echo_content "skyBlue" "============================"
echo_content "skyBlue" "1) 检查环境"
echo_content "skyBlue" "2) 测试 Git 账户"
echo_content "skyBlue" "3) 获取 Svr"
echo_content "skyBlue" "4) 获取 Web"
echo_content "skyBlue" "5) 运行 Docker"
echo_content "skyBlue" "6) 运行 Video 服务"
echo_content "skyBlue" "0) 退出"
echo_content "skyBlue" "============================"
read -rp "请输入选项 [0-6]: " choice
case $choice in
1)
check_install_git
check_install_NodeJs
check_install_PM2
check_install_unzip
check_install_docker
pause
;;
2)
if check_git_account; then
echo "✅ SSH 连接正常"
else
echo "❌ SSH 连接失败,请检查 SSH Key 或 Git 账户配置"
exit 1
fi
pause
;;
3)
fetch_git_svr
pause
;;
4)
fetch_git_web
pause
;;
5)
run_docker
pause
;;
6)
run_service
pause
;;
0)
echo "👋 退出程序."
exit 0
;;
*)
echo "⚠️ 无效选项,请重新输入!"
sleep 1
;;
esac
done
}
main
...@@ -2,32 +2,12 @@ ...@@ -2,32 +2,12 @@
install_dir="/home/bdvideo" install_dir="/home/bdvideo"
# production_run_dir="$install_dir/install_projects"
# production_run_repo="git.wkwork.xyz/root/install_projects.git"
# production_server_config_dir="$install_dir/production-server-config"
# production_server_config_repo="git.wkwork.xyz/tiktok/production-server-config.git"
# production_mysql_dir="$install_dir/production-mysql"
# production_mysql_repo="git.wkwork.xyz/tiktok/production-mysql.git"
# production_install_dir="$production_run_dir/production"
# projects=(
# # 项目名 项目仓库 项目保存目录
# "server git.wkwork.xyz/tiktok/production-server.git $install_dir/production-server"
# "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"
fi fi
cd $install_dir cd $install_dir
# BRANCH_FILE_SUFFIX=".branch"
# CREDENTIALS_FILE="$HOME/.git_credentials"
# 输出函数 # 输出函数
echo_content() { echo_content() {
ECHO_TYPE="echo -e" ECHO_TYPE="echo -e"
...@@ -204,381 +184,6 @@ check_install_docker() { ...@@ -204,381 +184,6 @@ check_install_docker() {
} }
# # 函数:解析项目信息
# get_project_info() {
# local project_info="$1"
# local index="$2"
# IFS=' ' read -r -a project_array <<<"$project_info"
# echo "${project_array[$index]}"
# }
# # 函数:获取所有项目名称
# get_project_names() {
# local names=()
# for project in "${projects[@]}"; do
# names+=("$(get_project_info "$project" 0)")
# done
# echo "${names[@]}"
# }
# set_branches() {
# repo_dir=$1
# repo_name=$2
# cd "$repo_dir" || exit 1
# # 获取当前分支
# current_branch=$(git branch --show-current)
# if [ -z "$current_branch" ]; then
# echo_content "red" "未能获取当前分支,可能项目没有被正确初始化为git仓库。"
# exit 1
# fi
# git fetch
# # 获取所有远程分支
# branches=$(git branch -r | sed 's/origin\///' | grep -v 'HEAD')
# #打印当前分支名称
# branch_count=$(echo "$branches" | wc -l)
# if [ "$branch_count" -gt 1 ]; then
# echo_content "yellow" "$repo_name 项目:分支选择 (如继续使用 '$current_branch' 直接回车):"
# # 显示分支列表
# i=1
# for branch in $branches; do
# echo "$i) $branch"
# i=$((i + 1))
# done
# # 提示用户选择
# read -p "请输入分支对应的数字 (回车保持当前分支: $current_branch): " input
# # 如果用户直接按回车,保持当前分支
# if [ -z "$input" ]; then
# echo_content "yellow" "继续使用当前分支: $current_branch"
# branch="$current_branch"
# else
# # 验证输入是否为有效的数字
# if [[ "$input" =~ ^[0-9]+$ ]] && ((input >= 1 && input <= branch_count)); then
# selected_branch=$(echo "$branches" | sed -n "${input}p" | xargs)
# echo_content "green" "你选择了分支: $selected_branch"
# # 切换到选定分支
# if git show-ref --verify --quiet "refs/heads/$selected_branch"; then
# git checkout "$selected_branch" # 切换到本地分支
# else
# git checkout -b "$selected_branch" "origin/$selected_branch" # 从远程分支创建并切换
# fi
# else
# echo_content "red" "无效的输入,请重新运行脚本。"
# exit 1
# fi
# fi
# fi
# }
# updata_project() {
# repo_dir=$1
# repo_name=$2
# set_branches $repo_dir $repo_name
# cd "$repo_dir" || exit 1
# # 检查工作区是否有未提交的更改
# if [[ -n $(git status --porcelain) ]]; then
# git add .
# git commit -m "Auto-commit: 保存当前变动"
# fi
# CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
# # git pull origin "$CURRENT_BRANCH"
# git pull --rebase -X theirs origin "$CURRENT_BRANCH"
# if [ $? -ne 0 ]; then
# echo_content "red" "更新代码失败,请手动检查冲突。"
# else
# echo_content "green" "代码更新完成。"
# fi
# }
# # 函数:拉取项目代码
# pull_project() {
# repo_url=$1
# repo_dir=$2
# repo_name=$3
# # 检查凭据是否存在
# if [ -f "$CREDENTIALS_FILE" ]; then
# source "$CREDENTIALS_FILE"
# else
# echo "请输入 Git 用户名:"
# read -r -p "用户名: " git_username
# echo "请输入 Git 密码:"
# read -s -p "密码: " git_password
# echo # 换行
# # 询问是否保存凭据
# echo "是否保存凭据到 $CREDENTIALS_FILE 以便下次使用?"
# read -p "请选择(y/n): " save_credentials
# echo # 换行
# if [ "$save_credentials" = "y" ]; then
# echo "git_username=\"$git_username\"" >"$CREDENTIALS_FILE"
# echo "git_password=\"$git_password\"" >>"$CREDENTIALS_FILE"
# chmod 600 "$CREDENTIALS_FILE" # 设置文件权限,仅用户可读写
# fi
# fi
# # 克隆私有仓库
# repo="https://$git_username:$git_password@$repo_url"
# echo_content "green" "克隆仓库 $repo ..."
# git clone $repo "$repo_dir"
# if [ $? -ne 0 ]; then
# rm $CREDENTIALS_FILE
# echo_content "red" "克隆仓库失败,请检查仓库地址和凭据"
# pull_project $repo_url $repo_dir $repo_name
# fi
# set_branches $repo_dir $repo_name
# }
# # 函数:卸载项目
# uninstall_project() {
# if [ -d "$install_dir" ]; then
# echo_content "yellow" "你确定要卸载项目吗?此操作将删除项目目录 '$install_dir' (y/n):"
# read -r confirm_uninstall
# if [ "$confirm_uninstall" = "y" ]; then
# echo_content "green" "正在卸载项目..."
# cd $production_install_dir
# docker-compose down
# docker network rm production_mall_network
# rm -rf "$install_dir" # 删除项目目录
# if [ $? -eq 0 ]; then
# echo_content "green" "项目已成功卸载。"
# else
# echo_content "red" "卸载失败。"
# fi
# else
# echo_content "yellow" "卸载操作已取消。"
# fi
# else
# echo_content "red" "项目目录不存在,无法卸载。"
# fi
# }
# # 函数:启动或重启项目
# start_project() {
# cd "$production_install_dir" || exit 1
# rm nginx/nginx.conf
# rm -rf nginx/nginx.conf
# cp nginx/nginx_clear_mysql.conf nginx/nginx.conf
# echo_content "green" "是否要启动/重启 项目?(y/n):"
# read -r restart
# if [ "$restart" = "y" ]; then
# if docker-compose ps | grep -q "Up"; then
# # 定义服务列表
# services=("mall-admin" "mall-api" "mall-data" "nginx" "mall-tools" "images_proxy")
# # 遍历服务列表
# for service in "${services[@]}"; do
# # 检查容器是否已创建
# if docker ps -a --format '{{.Names}}' | grep -Eq "(${service}|_[a-zA-Z0-9]+_${service})$"; then
# echo "docker-compose restart $service"
# docker-compose restart "$service"
# else
# echo "docker-compose up -d $service"
# docker-compose up -d "$service"
# fi
# done
# # docker-compose restart mall-admin mall-api mall-data nginx mall-tools go-nginx myiframe images_proxy proxy-mysql proxy-server
# echo "重启中 预计 60秒左右启动成功 ..."
# sleep 60
# else
# docker-compose up -d
# echo "第一次启动 预计 150 秒左右启动成功 ..."
# sleep 100
# docker-compose restart mall-admin mall-api mall-data
# echo "重启中 预计 60秒左右启动成功 ..."
# sleep 60
# fi
# fi
# }
# # 函数:选择要更新的项目
# select_project() {
# local project_names=($(get_project_names))
# # 判断项目数量
# if [ ${#project_names[@]} -eq 1 ]; then
# selected_project="${project_names[0]}"
# project_dir=$(get_project_info "${projects[0]}" 2)
# project_name=$(get_project_info "${projects[0]}" 0)
# else
# echo_content "yellow" "\n\n"
# echo_content "yellow" "请选择要更新的的项目\n"
# # 自定义 PS3 提示符
# PS3="请输入项目对应的数字:"
# select selected_project in "${project_names[@]}"; do
# if [ -n "$selected_project" ]; then
# for project in "${projects[@]}"; do
# if [ "$(get_project_info "$project" 0)" = "$selected_project" ]; then
# project_dir=$(get_project_info "$project" 2)
# project_name=$(get_project_info "$project" 0)
# break 2
# fi
# done
# else
# echo_content "red" "无效的选择,请重新选择。"
# continue
# fi
# done
# fi
# updata_project "$project_dir" "$project_name"
# }
# # 函数:选择要执行的操作
# select_operation() {
# echo_content "yellow" "请选择要执行的操作:"
# PS3="请输入操作对应的数字:"
# select operation in "更新项目" "启动/重启【项目】" "启动/重启【mysql】" "对外开放【mysql】" "重置容器" "卸载" "退出"; do
# case $REPLY in
# 1)
# echo_content "green" "你选择了操作: 更新项目"
# select_project
# start_project
# break
# ;;
# 2)
# echo_content "green" "你选择了操作: 商城(启动/重启)"
# start_project
# break
# ;;
# 3)
# echo_content "green" "你选择了操作: 重启mysql"
# cd "$production_install_dir" || exit 1
# docker-compose restart mysql
# break
# ;;
# 4)
# echo_content "green" "对外开放【mysql】"
# cd "$production_install_dir" || exit 1
# rm nginx/nginx.conf
# rm -rf nginx/nginx.conf
# cp nginx/nginx_open_mysql.conf nginx/nginx.conf
# docker-compose rm -sf nginx
# docker-compose up -d nginx
# break
# ;;
# 5)
# echo_content "green" "你选择了操作: 重置容器"
# echo_content "green" "是否要启动/重启 项目?(y/n):"
# read -r restart
# if [ "$restart" = "y" ]; then
# docker rm -f $(docker ps -aq)
# echo_content "green" "容器全部删除成功 请重启服务"
# start_project
# fi
# exit
# ;;
# 6)
# echo_content "green" "你选择了操作: 卸载"
# uninstall_project
# exit
# ;;
# 7)
# echo_content "green" "你选择了操作: 退出"
# exit
# ;;
# *)
# echo_content "red" "无效的选择"
# continue
# ;;
# esac
# done
# }
# # 函数: 初始化脚本 检查环境
# init_environment_check() {
# if [ ! -d "$production_run_dir/.git" ]; then
# # 运行相关逻辑,找到匹配项后可立即处理
# echo_content "green" "拉取项目: production_run"
# echo_content "green" "项目仓库: $production_run_repo"
# echo_content "green" "项目目录: $production_run_dir"
# pull_project "$production_run_repo" "$production_run_dir" "production_run"
# else
# echo_content "green" "更新项目: production_run"
# echo_content "green" "项目仓库: $production_run_repo"
# echo_content "green" "项目目录: $production_run_dir"
# updata_project "$production_run_dir" "production_run"
# fi
# if [ ! -d "$production_mysql_dir/.git" ]; then
# # 运行相关逻辑,找到匹配项后可立即处理
# echo_content "green" "拉取项目: production_mysql"
# echo_content "green" "项目仓库: $production_mysql_repo"
# echo_content "green" "项目目录: $production_mysql_dir"
# pull_project "$production_mysql_repo" "$production_mysql_dir" "服务端配置"
# cd "$production_mysql_dir/mysql"
# unzip data.zip
# # else
# # echo_content "green" "更新项目: production_mysql"
# # echo_content "green" "项目仓库: $production_mysql_repo"
# # echo_content "green" "项目目录: $production_mysql_dir"
# # updata_project "$production_mysql_dir" "production_mysql"
# fi
# if [ ! -d "$production_server_config_dir/.git" ]; then
# # 运行相关逻辑,找到匹配项后可立即处理
# echo_content "green" "拉取项目: 服务端配置文件"
# echo_content "green" "项目仓库: $production_server_config_repo"
# echo_content "green" "项目目录: $production_server_config_dir"
# pull_project "$production_server_config_repo" "$production_server_config_dir" "服务端配置"
# else
# echo_content "green" "更新项目: 服务端配置文件"
# echo_content "green" "项目仓库: $production_server_config_repo"
# echo_content "green" "项目目录: $production_server_config_dir"
# updata_project "$production_server_config_dir" "服务端配置文件"
# fi
# get_project_names
# for project in "${projects[@]}"; do
# # 获取项目信息
# project_name=$(get_project_info "$project" 0)
# project_repo=$(get_project_info "$project" 1)
# project_dir=$(get_project_info "$project" 2)
# # 检查项目目录中是否存在 .git 目录(即项目是否已拉取)
# if [ ! -d "$project_dir/.git" ]; then
# # 如果项目未被拉取,执行拉取操作
# echo_content "green" "拉取项目: $project_name"
# echo_content "green" "项目仓库: $project_repo"
# echo_content "green" "项目目录: $project_dir"
# # 调用 pull_project 函数进行项目拉取
# pull_project "$project_repo" "$project_dir" "$project_name"
# fi
# # rm -rf "$production_run_dir/tomallmcat/"
# # ln -s "$project_dir/$project_name" "$production_run_dir/$project_name"
# done
# }
# 更新分支函数 # 更新分支函数
update_branch() { update_branch() {
local repo_url=$1 local repo_url=$1
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论