From 9121d57e7ed0f0ba95ac27a8d456bfe37ad40dc3 Mon Sep 17 00:00:00 2001
From: zhengkunwang <31820853+zhengkunwang223@users.noreply.github.com>
Date: Tue, 25 Jun 2024 11:44:45 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E5=BA=94=E7=94=A8?=
=?UTF-8?q?=E5=8D=87=E7=BA=A7=E9=80=BB=E8=BE=91=EF=BC=8C=E6=8B=89=E5=8F=96?=
=?UTF-8?q?=E9=95=9C=E5=83=8F=E5=A4=B1=E8=B4=A5=E6=97=A0=E9=9C=80=E5=9B=9E?=
=?UTF-8?q?=E6=BB=9A=20(#5561)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
backend/app/service/app_utils.go | 66 +++++++++++--------
frontend/src/lang/modules/en.ts | 3 +-
frontend/src/lang/modules/tw.ts | 2 +-
frontend/src/lang/modules/zh.ts | 2 +-
.../app-store/installed/upgrade/index.vue | 4 +-
5 files changed, 45 insertions(+), 32 deletions(-)
diff --git a/backend/app/service/app_utils.go b/backend/app/service/app_utils.go
index 1a2de3bb3..dd06c8737 100644
--- a/backend/app/service/app_utils.go
+++ b/backend/app/service/app_utils.go
@@ -512,6 +512,7 @@ func upgradeInstall(req request.AppInstallUpgrade) error {
var (
upErr error
backupFile string
+ preErr error
)
global.LOG.Infof(i18n.GetMsgWithName("UpgradeAppStart", install.Name, nil))
if req.Backup {
@@ -544,18 +545,27 @@ func upgradeInstall(req request.AppInstallUpgrade) error {
_ = appInstallRepo.Save(context.Background(), &existInstall)
}
}
+ if preErr != nil {
+ global.LOG.Infof(i18n.GetMsgWithName("ErrAppUpgrade", install.Name, preErr))
+ existInstall, _ := appInstallRepo.GetFirst(commonRepo.WithByID(req.InstallID))
+ if existInstall.ID > 0 {
+ existInstall.Status = constant.UpgradeErr
+ existInstall.Message = preErr.Error()
+ _ = appInstallRepo.Save(context.Background(), &existInstall)
+ }
+ }
}()
fileOp := files.NewFileOp()
detailDir := path.Join(constant.ResourceDir, "apps", install.App.Resource, install.App.Key, detail.Version)
if install.App.Resource == constant.AppResourceRemote {
- if upErr = downloadApp(install.App, detail, &install); upErr != nil {
+ if preErr = downloadApp(install.App, detail, &install); preErr != nil {
return
}
if detail.DockerCompose == "" {
composeDetail, err := fileOp.GetContent(path.Join(detailDir, "docker-compose.yml"))
if err != nil {
- upErr = err
+ preErr = err
return
}
detail.DockerCompose = string(composeDetail)
@@ -570,6 +580,32 @@ func upgradeInstall(req request.AppInstallUpgrade) error {
detailDir = path.Join(constant.ResourceDir, "apps", "local", strings.TrimPrefix(install.App.Key, "local"), detail.Version)
}
+ content, err := fileOp.GetContent(install.GetEnvPath())
+ if err != nil {
+ preErr = err
+ return
+ }
+ if req.PullImage {
+ projectName := strings.ToLower(install.Name)
+ images, err := composeV2.GetDockerComposeImages(projectName, content, []byte(detail.DockerCompose))
+ if err != nil {
+ preErr = err
+ return
+ }
+ for _, image := range images {
+ global.LOG.Infof(i18n.GetMsgWithName("PullImageStart", image, nil))
+ if out, err := cmd.ExecWithTimeOut("docker pull "+image, 20*time.Minute); err != nil {
+ if out != "" {
+ err = errors.New(out)
+ }
+ preErr = buserr.WithNameAndErr("ErrDockerPullImage", "", err)
+ return
+ } else {
+ global.LOG.Infof(i18n.GetMsgByKey("PullImageSuccess"))
+ }
+ }
+ }
+
command := exec.Command("/bin/bash", "-c", fmt.Sprintf("cp -rn %s/* %s || true", detailDir, install.GetPath()))
stdout, _ := command.CombinedOutput()
if stdout != nil {
@@ -598,32 +634,6 @@ func upgradeInstall(req request.AppInstallUpgrade) error {
install.Version = detail.Version
install.AppDetailId = req.DetailID
- content, err := fileOp.GetContent(install.GetEnvPath())
- if err != nil {
- upErr = err
- return
- }
-
- if req.PullImage {
- projectName := strings.ToLower(install.Name)
- images, err := composeV2.GetDockerComposeImages(projectName, content, []byte(detail.DockerCompose))
- if err != nil {
- upErr = err
- return
- }
- for _, image := range images {
- global.LOG.Infof(i18n.GetMsgWithName("PullImageStart", image, nil))
- if out, err := cmd.ExecWithTimeOut("docker pull "+image, 20*time.Minute); err != nil {
- if out != "" {
- err = errors.New(out)
- }
- upErr = buserr.WithNameAndErr("ErrDockerPullImage", "", err)
- } else {
- global.LOG.Infof(i18n.GetMsgByKey("PullImageSuccess"))
- }
- }
- }
-
if out, err := compose.Down(install.GetComposePath()); err != nil {
if out != "" {
upErr = errors.New(out)
diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts
index da484a754..e6124b0f7 100644
--- a/frontend/src/lang/modules/en.ts
+++ b/frontend/src/lang/modules/en.ts
@@ -1766,7 +1766,8 @@ const message = {
ignoreList: 'ignore list',
appHelper: 'Please view the installation instructions of some applications on the application details page',
backupApp: 'Backup application before upgrade',
- backupAppHelper: 'If the upgrade fails, you can use the application backup to roll back',
+ backupAppHelper:
+ 'If the upgrade fails, the backup will be automatically rolled back. Please check the failure reason in the log audit-system log',
delete: 'Delete',
openrestyDeleteHelper:
'Forcibly deleting OpenResty will delete all websites, please confirm the risk before operation',
diff --git a/frontend/src/lang/modules/tw.ts b/frontend/src/lang/modules/tw.ts
index 9ce2d4be8..751827a41 100644
--- a/frontend/src/lang/modules/tw.ts
+++ b/frontend/src/lang/modules/tw.ts
@@ -1643,7 +1643,7 @@ const message = {
ignoreList: '忽略列表',
appHelper: '部分應用的安裝使用說明請在應用詳情頁查看',
backupApp: '升級前備份應用',
- backupAppHelper: '升級失敗可以使用應用備份回滾',
+ backupAppHelper: '升級失敗會使用備份自動回滾,請在日誌審計-系統日誌中查看失敗原因',
delete: '刪除',
openrestyDeleteHelper: '強制刪除 OpenResty 會刪除所有的網站,請確認風險後操作',
downloadLogHelper1: '即將下載 {0} 套用所有日誌,是否繼續? ',
diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts
index bd80f60eb..d5ae84d2c 100644
--- a/frontend/src/lang/modules/zh.ts
+++ b/frontend/src/lang/modules/zh.ts
@@ -1644,7 +1644,7 @@ const message = {
ignoreList: '忽略列表',
appHelper: '部分应用的安装使用说明请在应用详情页查看',
backupApp: '升级前备份应用',
- backupAppHelper: '升级失败可以使用应用备份回滚',
+ backupAppHelper: '升级失败会使用备份自动回滚,请在日志审计-系统日志中查看失败原因',
delete: '删除',
openrestyDeleteHelper: '强制删除 OpenResty 会删除所有的网站,请确认风险之后操作',
downloadLogHelper1: '即将下载 {0} 应用所有日志,是否继续?',
diff --git a/frontend/src/views/app-store/installed/upgrade/index.vue b/frontend/src/views/app-store/installed/upgrade/index.vue
index 400a050f6..b1c0af9fd 100644
--- a/frontend/src/views/app-store/installed/upgrade/index.vue
+++ b/frontend/src/views/app-store/installed/upgrade/index.vue
@@ -53,7 +53,9 @@
- {{ $t('app.backupAppHelper') }}
+
+ {{ $t('app.backupAppHelper') }}
+