Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
I
install.api
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Script
install.api
Commits
11207ecc
Commit
11207ecc
authored
Mar 16, 2020
by
金凯强
🎨
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
远程升级拆成6步
parent
2323a614
Pipeline
#20840
passed with stage
in 24 seconds
Changes
2
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
138 additions
and
8 deletions
+138
-8
upgarde_api.py
app/upgrade/upgarde_api.py
+29
-3
upgrade_service.py
app/upgrade/upgrade_service.py
+109
-5
No files found.
app/upgrade/upgarde_api.py
View file @
11207ecc
...
@@ -49,14 +49,40 @@ class UpgradeAPI(ApiController):
...
@@ -49,14 +49,40 @@ class UpgradeAPI(ApiController):
log_id
=
request
.
args
.
get
(
'log_id'
)
log_id
=
request
.
args
.
get
(
'log_id'
)
return
UpgradeService
()
.
remote_upgrade_step2
(
log_id
)
return
UpgradeService
()
.
remote_upgrade_step2
(
log_id
)
@
api
(
'remote/step3'
)
@
api
(
'remote/step3
/<int:app_count>/
'
)
def
get_remote_upgrade
3
(
self
):
def
get_remote_upgrade
2
(
self
,
app_count
):
'''
'''
远程升级---3
远程升级---3
:return:
:return:
'''
'''
log_id
=
request
.
args
.
get
(
'log_id'
)
log_id
=
request
.
args
.
get
(
'log_id'
)
return
UpgradeService
()
.
remote_upgrade_step3
(
log_id
)
return
UpgradeService
()
.
remote_upgrade_step3
(
app_count
,
log_id
)
@
api
(
'remote/step4'
)
def
get_remote_upgrade4
(
self
):
'''
远程升级---4
:return:
'''
log_id
=
request
.
args
.
get
(
'log_id'
)
return
UpgradeService
()
.
remote_upgrade_step4
(
log_id
)
@
api
(
'remote/step5/<int:tar_file_index>'
)
def
get_remote_upgrade5
(
self
,
tar_file_index
):
'''
远程升级---5
:return:
'''
log_id
=
request
.
args
.
get
(
'log_id'
)
return
UpgradeService
()
.
remote_upgrade_step5
(
tar_file_index
,
log_id
)
@
api
(
'remote/step6'
)
def
get_remote_upgrade6
(
self
):
'''
远程升级---6
:return:
'''
return
UpgradeService
()
.
remote_upgrade_step6
()
@
api
(
'package_images/<int:log_id>'
)
@
api
(
'package_images/<int:log_id>'
)
def
get_package_images
(
self
,
log_id
):
def
get_package_images
(
self
,
log_id
):
...
...
app/upgrade/upgrade_service.py
View file @
11207ecc
...
@@ -184,19 +184,67 @@ docker-compose -f /data/upgrade_tools_data/backup/{upgrade_no}/docker-compose.ym
...
@@ -184,19 +184,67 @@ docker-compose -f /data/upgrade_tools_data/backup/{upgrade_no}/docker-compose.ym
远程升级2
远程升级2
:return:
:return:
'''
'''
upgrade_no
=
self
.
get_upgrade_no_by_log_id
(
log_id
)
upgrade_no
=
self
.
get_upgrade_no_by_log_id
(
log_id
)
# 分步骤
# 1、获取文件下所有要升级的app,如果有则删除这个目录下的tar,并返回要升级app的数量
# 2、根据传入的顺序打包
docker_compose_file_dir
=
self
.
find_compose_by_upgrade_no
(
upgrade_no
)
# 打包所有当前版本的所有app 到 /data下
# 获取要升级的镜镜像名称
deploy_image_list
=
self
.
_get_deploy_image
(
docker_compose_file_dir
)
logger
.
info
(
'要升级的镜像信息如下:
\n
{}'
.
format
(
deploy_image_list
))
self
.
_package_images
(
upgrade_no
)
if
not
deploy_image_list
:
raise
HSException
(
'未在docker-compose文件中找到要升级的app'
)
upgrade_no_back_up_dir
=
os
.
path
.
join
(
back_up_dir
,
upgrade_no
)
return
{
"message"
:
f
'打包完成,请到D:
\\
HuanSi
\\
LinuxData
\\
upgrade
\\
upgrade_tools_data
\\
backup
\\
{upgrade_no}查看'
,
if
not
os
.
path
.
exists
(
upgrade_no_back_up_dir
):
"step"
:
"2"
,
"status"
:
"running"
,
"later_message"
:
"正在上传服务器并升级,该过程会很漫长,请耐心等待..."
}
raise
HSException
(
f
'{upgrade_no_back_up_dir}找不到'
)
# 删除旧镜像
os
.
system
(
f
'rm -f {upgrade_no_back_up_dir}/*.tar'
)
return
{
"app_cout"
:
len
(
deploy_image_list
)}
def
remote_upgrade_step3
(
self
,
log_id
=
None
):
def
remote_upgrade_step3
(
self
,
app_count
,
log_id
=
None
):
'''
'''
远程升级3
远程升级3
:param app_count:
:param log_id:
:return:
'''
upgrade_no
=
self
.
get_upgrade_no_by_log_id
(
log_id
)
# 分步骤
# 1、获取文件下所有要升级的app,如果有则删除这个目录下的tar,并返回要升级app的数量
# 2、根据传入的顺序打包
docker_compose_file_dir
=
self
.
find_compose_by_upgrade_no
(
upgrade_no
)
# 打包所有当前版本的所有app 到 /data下
# 获取要升级的镜镜像名称
deploy_image_list
=
self
.
_get_deploy_image
(
docker_compose_file_dir
)
try
:
deploy_image
=
deploy_image_list
[
int
(
app_count
)
-
1
]
except
IndexError
:
raise
HSException
(
'请检查app顺序'
)
upgrade_no_back_up_dir
=
os
.
path
.
join
(
back_up_dir
,
upgrade_no
)
logger
.
info
(
'生成镜像:{}'
.
format
(
deploy_image
))
file_name
=
deploy_image
.
replace
(
'/'
,
'___'
)
.
replace
(
':'
,
'__'
)
+
'.tar'
_cmd
=
'docker save {} -o {}/{}'
.
format
(
deploy_image
,
upgrade_no_back_up_dir
,
file_name
)
result
=
os
.
system
(
_cmd
)
if
result
==
1
:
raise
RuntimeError
(
"{}执行出错"
.
format
(
_cmd
))
logger
.
info
(
f
'镜像生成完毕,目录为{upgrade_no_back_up_dir}'
)
def
remote_upgrade_step4
(
self
,
log_id
=
None
):
'''
远程升级4
:return:
:return:
'''
'''
# 分步骤
# 上传除tar文件的数量,找tar文件数量,返回数量
# 根据顺序挨个上tar文件
# 远程执行升级命令
upgrade_no
=
self
.
get_upgrade_no_by_log_id
(
log_id
)
upgrade_no
=
self
.
get_upgrade_no_by_log_id
(
log_id
)
# 找到服务器ip
# 找到服务器ip
# 上传app包到服务器
# 上传app包到服务器
...
@@ -212,19 +260,75 @@ docker-compose -f /data/upgrade_tools_data/backup/{upgrade_no}/docker-compose.ym
...
@@ -212,19 +260,75 @@ docker-compose -f /data/upgrade_tools_data/backup/{upgrade_no}/docker-compose.ym
# 复制文件到待上传的目录
# 复制文件到待上传的目录
upgrade_back_up_dir
=
os
.
path
.
join
(
temp_file_dir
,
'backup'
,
upgrade_no
)
upgrade_back_up_dir
=
os
.
path
.
join
(
temp_file_dir
,
'backup'
,
upgrade_no
)
tar_file_index
=
0
with
ssh_conenct
as
ssh
:
with
ssh_conenct
as
ssh
:
for
files
in
os
.
listdir
(
upgrade_back_up_dir
):
for
files
in
os
.
listdir
(
upgrade_back_up_dir
):
path
=
os
.
path
.
join
(
upgrade_back_up_dir
,
files
)
path
=
os
.
path
.
join
(
upgrade_back_up_dir
,
files
)
# 隐藏文件不复制
# 隐藏文件不复制
if
files
.
startswith
(
'.'
):
if
files
.
startswith
(
'.'
):
continue
continue
# 镜像文件单独上传
if
files
.
endswith
(
'.tar'
):
tar_file_index
+=
1
continue
logger
.
info
(
f
"地址:{path}---->/huansi/upgrade/{files}"
)
logger
.
info
(
f
"地址:{path}---->/huansi/upgrade/{files}"
)
ssh
.
upload
(
path
,
f
'/huansi/upgrade/{files}'
)
ssh
.
upload
(
path
,
f
'/huansi/upgrade/{files}'
)
ssh
.
upload
(
os
.
path
.
join
(
system_file_dir
,
'load.sh'
),
'/huansi/upgrade/load.sh'
)
ssh
.
upload
(
os
.
path
.
join
(
system_file_dir
,
'load.sh'
),
'/huansi/upgrade/load.sh'
)
ssh
.
upload
(
os
.
path
.
join
(
profile_dir
,
'huansi.sh'
),
'/huansi/upgrade/huansi.sh'
)
ssh
.
upload
(
os
.
path
.
join
(
profile_dir
,
'huansi.sh'
),
'/huansi/upgrade/huansi.sh'
)
ssh
.
upload
(
os
.
path
.
join
(
system_file_dir
,
'load_handle.py'
),
'/huansi/upgrade/load_handle.py'
)
ssh
.
upload
(
os
.
path
.
join
(
system_file_dir
,
'load_handle.py'
),
'/huansi/upgrade/load_handle.py'
)
return
{
"app_cout"
:
tar_file_index
}
def
remote_upgrade_step5
(
self
,
tar_file_index
,
log_id
=
None
):
'''
远程升级5
:return:
'''
upgrade_no
=
self
.
get_upgrade_no_by_log_id
(
log_id
)
# 找到服务器ip
# 上传app包到服务器
remote_server_info
=
ConnectionService
()
.
get_remote_server_info
()
if
not
remote_server_info
:
raise
HSException
(
'远端服务器信息未查到,请先配置'
)
ssh_conenct
=
SSHConnect
(
host_ip
=
remote_server_info
[
'server_ip'
],
host_port
=
remote_server_info
[
'server_ssh_port'
],
user_name
=
remote_server_info
[
'server_user'
],
password
=
remote_server_info
[
'server_password'
])
# 复制文件到待上传的目录
upgrade_back_up_dir
=
os
.
path
.
join
(
temp_file_dir
,
'backup'
,
upgrade_no
)
local_tar_file_list
=
[
item
for
item
in
os
.
listdir
(
upgrade_back_up_dir
)
if
item
.
endswith
(
'.tar'
)]
with
ssh_conenct
as
ssh
:
try
:
local_tar_file
=
local_tar_file_list
[
int
(
tar_file_index
-
1
)]
except
IndexError
:
raise
HSException
(
'请检查app顺序'
)
path
=
os
.
path
.
join
(
upgrade_back_up_dir
,
local_tar_file
)
logger
.
info
(
f
"地址:{path}---->/huansi/upgrade/{local_tar_file}"
)
ssh
.
upload
(
path
,
f
'/huansi/upgrade/{local_tar_file}'
)
def
remote_upgrade_step6
(
self
):
'''
远程升级6
:return:
'''
# 找到服务器ip
# 上传app包到服务器
remote_server_info
=
ConnectionService
()
.
get_remote_server_info
()
if
not
remote_server_info
:
raise
HSException
(
'远端服务器信息未查到,请先配置'
)
ssh_conenct
=
SSHConnect
(
host_ip
=
remote_server_info
[
'server_ip'
],
host_port
=
remote_server_info
[
'server_ssh_port'
],
user_name
=
remote_server_info
[
'server_user'
],
password
=
remote_server_info
[
'server_password'
])
with
ssh_conenct
as
ssh
:
out
,
err
=
ssh
.
exec_command
(
"sh /huansi/upgrade/load.sh"
)
out
,
err
=
ssh
.
exec_command
(
"sh /huansi/upgrade/load.sh"
)
logger
.
info
(
f
'远程升级信息:{out},远程错误信息:{err}'
)
logger
.
info
(
f
'远程升级信息:{out},远程错误信息:{err}'
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment