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') }} +