From 383bdd5f15007483c2f4e0305e77b8bcb06ce00e Mon Sep 17 00:00:00 2001 From: ssongliu <73214554+ssongliu@users.noreply.github.com> Date: Tue, 8 Jul 2025 19:06:47 +0800 Subject: [PATCH] fix: Change container image building to asynchronous operation (#9462) Refs #8463 --- agent/app/dto/container.go | 2 ++ agent/app/service/container.go | 17 +++++++++++++++-- agent/app/service/image_repo.go | 8 +++++--- agent/app/task/task.go | 1 + agent/i18n/lang/en.yaml | 1 + agent/i18n/lang/ja.yaml | 1 + agent/i18n/lang/ko.yaml | 1 + agent/i18n/lang/ms.yaml | 1 + agent/i18n/lang/pt-BR.yaml | 1 + agent/i18n/lang/ru.yaml | 1 + agent/i18n/lang/tr.yaml | 1 + agent/i18n/lang/zh-Hant.yaml | 1 + agent/i18n/lang/zh.yaml | 1 + frontend/src/api/interface/container.ts | 1 + .../views/container/container/commit/index.vue | 12 ++++++++++++ 15 files changed, 45 insertions(+), 5 deletions(-) diff --git a/agent/app/dto/container.go b/agent/app/dto/container.go index 27da55b28..88d810d96 100644 --- a/agent/app/dto/container.go +++ b/agent/app/dto/container.go @@ -164,6 +164,8 @@ type ContainerCommit struct { Comment string `json:"comment"` Author string `json:"author"` Pause bool `json:"pause"` + + TaskID string `json:"taskID"` } type ContainerPrune struct { diff --git a/agent/app/service/container.go b/agent/app/service/container.go index 1d5b18d09..f7ea6114c 100644 --- a/agent/app/service/container.go +++ b/agent/app/service/container.go @@ -809,10 +809,23 @@ func (u *ContainerService) ContainerCommit(req dto.ContainerCommit) error { Pause: req.Pause, Config: nil, } - _, err = client.ContainerCommit(ctx, req.ContainerId, options) + + taskItem, err := task.NewTaskWithOps(req.NewImageName, task.TaskCommit, task.TaskScopeContainer, req.TaskID, 1) if err != nil { - return fmt.Errorf("failed to commit container, err: %v", err) + return fmt.Errorf("new task for container commit failed, err: %v", err) } + + go func() { + taskItem.AddSubTask(i18n.GetWithName("TaskCommit", req.NewImageName), func(t *task.Task) error { + res, err := client.ContainerCommit(ctx, req.ContainerId, options) + if err != nil { + return fmt.Errorf("failed to commit container, err: %v", err) + } + taskItem.Log(res.ID) + return nil + }, nil) + _ = taskItem.Execute() + }() return nil } diff --git a/agent/app/service/image_repo.go b/agent/app/service/image_repo.go index 76aaa6ca5..3b4950132 100644 --- a/agent/app/service/image_repo.go +++ b/agent/app/service/image_repo.go @@ -164,10 +164,12 @@ func (u *ImageRepoService) Update(req dto.ImageRepoUpdate) error { needRestart = repo.DownloadUrl == req.DownloadUrl } if repo.Protocol == "https" && req.Protocol == "http" { - if err := u.handleRegistries(req.DownloadUrl, "", "create"); err != nil { - return fmt.Errorf("create registry %s failed, err: %v", req.DownloadUrl, err) + if req.DownloadUrl != repo.DownloadUrl { + if err := u.handleRegistries(req.DownloadUrl, repo.DownloadUrl, "update"); err != nil { + return fmt.Errorf("update registry %s => %s failed, err: %v", repo.DownloadUrl, req.DownloadUrl, err) + } + needRestart = true } - needRestart = true } if needRestart { if err := stopBeforeUpdateRepo(); err != nil { diff --git a/agent/app/task/task.go b/agent/app/task/task.go index 044740043..6378277af 100644 --- a/agent/app/task/task.go +++ b/agent/app/task/task.go @@ -63,6 +63,7 @@ const ( TaskSync = "TaskSync" TaskBuild = "TaskBuild" TaskPull = "TaskPull" + TaskCommit = "TaskCommit" TaskPush = "TaskPush" TaskHandle = "TaskHandle" ) diff --git a/agent/i18n/lang/en.yaml b/agent/i18n/lang/en.yaml index ce900fbb6..4babfc6c2 100644 --- a/agent/i18n/lang/en.yaml +++ b/agent/i18n/lang/en.yaml @@ -287,6 +287,7 @@ TaskBackup: 'Backup' TaskRecover: 'Recover' TaskRollback: 'Rollback' TaskPull: 'Pull' +TaskCommit: 'Commit' TaskBuild: 'Build' TaskPush: 'Push' TaskHandle: 'Execute' diff --git a/agent/i18n/lang/ja.yaml b/agent/i18n/lang/ja.yaml index 0d95e7a90..99b355b86 100644 --- a/agent/i18n/lang/ja.yaml +++ b/agent/i18n/lang/ja.yaml @@ -287,6 +287,7 @@ TaskBackup: 'バックアップ' TaskRecover: '回復' TaskRollback: 'ロールバック' TaskPull: 'プル' +TaskCommit: 'コミット' TaskBuild: 'ビルド' TaskPush: 'プッシュ' TaskHandle: '実行' diff --git a/agent/i18n/lang/ko.yaml b/agent/i18n/lang/ko.yaml index f5fda0462..8d6e15bb5 100644 --- a/agent/i18n/lang/ko.yaml +++ b/agent/i18n/lang/ko.yaml @@ -287,6 +287,7 @@ TaskBackup: '백업' TaskRecover: '복구' TaskRollback: '롤백' TaskPull: '당기기' +TaskCommit: '커밋' TaskBuild: '빌드' TaskPush: '푸시' TaskHandle: '실행' diff --git a/agent/i18n/lang/ms.yaml b/agent/i18n/lang/ms.yaml index 8528016ec..47756f421 100644 --- a/agent/i18n/lang/ms.yaml +++ b/agent/i18n/lang/ms.yaml @@ -286,6 +286,7 @@ TaskBackup: 'Sandaran' TaskRecover: 'Pulihkan' TaskRollback: 'Rollback' TaskPull: 'Tarik' +TaskCommit: 'Komit' TaskBuild: 'Bina' TaskPush: 'Tolak' TaskHandle: 'Laksanakan' diff --git a/agent/i18n/lang/pt-BR.yaml b/agent/i18n/lang/pt-BR.yaml index dcc60af73..3f757fa63 100644 --- a/agent/i18n/lang/pt-BR.yaml +++ b/agent/i18n/lang/pt-BR.yaml @@ -287,6 +287,7 @@ Backup de Tarefa: 'Backup' TaskRecover: 'Recuperar' TaskRollback: 'Reverter' TaskPull: 'Puxar' +TaskCommit: 'Commit' TaskBuild: 'Construir' TaskPush: 'Empurrar' TaskHandle: 'Executar' diff --git a/agent/i18n/lang/ru.yaml b/agent/i18n/lang/ru.yaml index 74222e168..50a93a930 100644 --- a/agent/i18n/lang/ru.yaml +++ b/agent/i18n/lang/ru.yaml @@ -287,6 +287,7 @@ TaskBackup: 'Резервное копирование' TaskRecover: 'Восстановить' TaskRollback: 'Откат' TaskPull: 'Вытянуть' +TaskCommit: 'Kоммит' ЗадачаСборка: 'Сборка' TaskPush: 'Push' TaskHandle: 'Выполнить' diff --git a/agent/i18n/lang/tr.yaml b/agent/i18n/lang/tr.yaml index 4b7b1527c..50783bba0 100644 --- a/agent/i18n/lang/tr.yaml +++ b/agent/i18n/lang/tr.yaml @@ -285,6 +285,7 @@ TaskBackup: 'Yedekle' TaskRecover: 'Kurtar' TaskRollback: 'Geri Al' TaskPull: 'Çek' +TaskCommit: 'işleme' TaskBuild: 'Yapı' TaskPush: 'Gönder' TaskHandle: 'Yürüt' diff --git a/agent/i18n/lang/zh-Hant.yaml b/agent/i18n/lang/zh-Hant.yaml index 1ad1319cf..abadf5b0a 100644 --- a/agent/i18n/lang/zh-Hant.yaml +++ b/agent/i18n/lang/zh-Hant.yaml @@ -286,6 +286,7 @@ TaskBackup: '備份' TaskRecover: '復原' TaskRollback: '回滾' TaskPull: '拉取' +TaskCommit: '制作' TaskBuild: '建置' TaskPush: '推送' TaskHandle: '執行' diff --git a/agent/i18n/lang/zh.yaml b/agent/i18n/lang/zh.yaml index 0dd9f2863..31be9001f 100644 --- a/agent/i18n/lang/zh.yaml +++ b/agent/i18n/lang/zh.yaml @@ -286,6 +286,7 @@ TaskBackup: "备份" TaskRecover: "恢复" TaskRollback: "回滚" TaskPull: "拉取" +TaskCommit: "制作" TaskBuild: "构建" TaskPush: "推送" TaskHandle: "执行" diff --git a/frontend/src/api/interface/container.ts b/frontend/src/api/interface/container.ts index b931c17a5..d82d9dfb6 100644 --- a/frontend/src/api/interface/container.ts +++ b/frontend/src/api/interface/container.ts @@ -16,6 +16,7 @@ export namespace Container { comment: string; author: string; pause: boolean; + taskID: string; } export interface ContainerSearch extends ReqPage { name: string; diff --git a/frontend/src/views/container/container/commit/index.vue b/frontend/src/views/container/container/commit/index.vue index 40e108267..d999816ad 100644 --- a/frontend/src/views/container/container/commit/index.vue +++ b/frontend/src/views/container/container/commit/index.vue @@ -42,6 +42,7 @@ +