Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
I
install_sh
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
Administrator
install_sh
Commits
8ea506ce
提交
8ea506ce
authored
10月 25, 2024
作者:
yoyoyo
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
1
上级
e6ccef4a
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
232 行增加
和
35 行删除
+232
-35
商城_run.sh
商城_run.sh
+232
-35
没有找到文件。
商城_run.sh
浏览文件 @
8ea506ce
...
...
@@ -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
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论