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 @@
+