提交 8ea506ce authored 作者: yoyoyo's avatar yoyoyo

1

上级 e6ccef4a
......@@ -2,9 +2,16 @@
install_dir="/wwwroot"
project_dir="/wwwroot/production-run"
# 安装项目的git仓库地址
project_repo="git.wkwork.xyz/tiktok/production-run.git"
production_run_dir="$install_dir/production-run"
production_run_repo="git.wkwork.xyz/tiktok/production-run.git"
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
......@@ -97,7 +104,30 @@ 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
cd "$repo_dir" || exit 1
# 获取当前分支
current_branch=$(git branch --show-current)
......@@ -138,28 +168,28 @@ set_branches(){
fi
}
# 函数:拉取项目代码
pull_project() {
if [ -d "$project_dir/.git" ]; then
echo_content "green" "$runprojects 项目存在,开始更新代码..."
# 进入项目目录
cd "$project_dir" || exit 1
updata_project(){
repo_dir=$1
# 更新代码,如果有冲突时使用本地版本
git fetch origin
git merge -X ours origin/master # 使用 'ours' 策略以本地为主
if [ $? -ne 0 ]; then
echo_content "red" "更新代码失败,请手动检查冲突。"
exit 1
fi
cd "$repo_dir" || exit 1
# 更新代码,如果有冲突时使用本地版本
git fetch origin
git merge -X ours origin/master # 使用 'ours' 策略以本地为主
if [ $? -ne 0 ]; then
echo_content "red" "更新代码失败,请手动检查冲突。"
exit 1
fi
echo_content "green" "代码更新完成。"
return
fi
echo_content "green" "代码更新完成。"
}
echo_content "green" "$runprojects 项目本地未安装,开始拉取..."
# 函数:拉取项目代码
pull_project() {
repo_url=$1
repo_dir=$2
# 检查凭据是否存在
if [ -f "$CREDENTIALS_FILE" ]; then
source "$CREDENTIALS_FILE"
......@@ -183,35 +213,202 @@ pull_project() {
fi
# 克隆私有仓库
repo="https://$git_username:$git_password@$project_repo"
repo="https://$git_username:$git_password@$repo_url"
echo_content "green" "克隆仓库 $repo ..."
git clone $repo "$project_dir"
git clone $repo "$repo_dir"
if [ $? -ne 0 ]; then
echo_content "red" "克隆仓库失败,请检查仓库地址和凭据。"
exit 1
fi
# 进入项目目录
cd "$project_dir" || exit 1
set_branches
set_branches $repo_dir
}
# 函数:卸载项目
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_run_dir
docker-compose down
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_run_dir" || exit 1
echo_content "green" "是否要启动/重启项目?(y/n):"
read -r restart
if [ "$restart" = "y" ]; then
docker-compose up -d
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)
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)
break 2
fi
done
else
echo_content "red" "无效的选择,请重新选择。"
continue
fi
done
fi
updata_project $project_dir
}
# 函数:选择要执行的操作
select_operation() {
echo_content "yellow" "请选择要执行的操作:"
PS3="请输入操作对应的数字:"
select operation in "更新项目" "启动/重启" "卸载"; do
case $REPLY in
1)
echo_content "green" "你选择了操作: 更新项目"
break
;;
2)
echo_content "green" "你选择了操作: 启动/重启"
break
;;
3)
echo_content "green" "你选择了操作: 卸载项目"
break
;;
*)
echo_content "red" "无效的选择,请输入 1 2 。"
continue
;;
esac
done
if [ "$operation" == "更新项目" ]; then
select_project
start_project
elif [ "$operation" == "启动/重启" ] ; then
start_project
elif [ "$operation" == "卸载" ] ; then
uninstall_project # 卸载
else
echo_content "red" "无效的操作。"
fi
}
# 函数: 初始化脚本 检查环境
init_environment_check(){
echo_content "green" "安装目录:$install_dir"
echo_content "green" "初始化脚本 检查环境..."
check_git
install_docker
pull_project
cd $project_dir
bash start.sh $project_dir
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
else
echo_content "green" "更新项目: production_run"
echo_content "green" "项目仓库: $production_run_repo"
echo_content "green" "项目目录: $production_run_dir"
updata_project $production_run_dir
fi
local project_names=($(get_project_names))
select selected_project in "${project_names[@]}"; do
if [ -n "$selected_project" ]; then
# 直接遍历 selected_project
for project in "${projects[@]}"; do
# 直接使用 selected_project 匹配并获取信息
if [ "$(get_project_info "$project" 0)" = "$selected_project" ]; then
project_name=$selected_project
project_repo=$(get_project_info "$project" 1)
project_dir=$(get_project_info "$project" 2)
if [ ! -d "$project_dir/.git" ]; then
# 运行相关逻辑,找到匹配项后可立即处理
echo_content "green" "拉取项目: $project_name"
echo_content "green" "项目仓库: $project_repo"
echo_content "green" "项目目录: $project_dir"
pull_project $project_repo $project_dir
fi
# 退出循环
break 2
fi
done
else
echo_content "red" "没有配置项目"
exit 1
fi
done
}
main(){
echo_content "green" "安装目录:$install_dir"
echo_content "green" "初始化脚本 检查环境..."
check_git
install_docker
init_environment_check
}
init_environment_check
main
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论