From 38ae9d7d076b1282feb3ea6327b40f281673b5fc Mon Sep 17 00:00:00 2001 From: kdletters Date: Mon, 17 Aug 2026 12:42:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E9=A2=84=E8=A7=88=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E8=AE=B0=E5=BD=95=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 发布记录改用 Jenkins 构建编号并展示 失败与停止记录增加自动清理期限 构建详情改为局域网 Jenkins 地址 同步测试、部署配置和运维文档 --- .../src/PreviewDeployerApp.test.tsx | 9 +- .../src/PreviewDeployerApp.tsx | 13 ++- apps/preview-deployer-web/src/styles.css | 5 + apps/preview-deployer-web/src/types.ts | 2 +- deploy/env/preview-deployer.env.example | 2 + .../shared-memory/decision-log.md | 6 ++ ...Jenkins容器预览部署控制面技术方案-2026-08-15.md | 4 +- ...发运维】本地开发验证与生产运维-2026-05-15.md | 2 +- scripts/check-preview-deployer.mjs | 19 ++++ .../preview-deployer-server/src/config.rs | 25 +++++ .../preview-deployer-server/src/jenkins.rs | 48 ++++++++- .../crates/preview-deployer-server/src/lib.rs | 101 ++++++++++++++---- .../preview-deployer-server/src/tests.rs | 100 ++++++++++++++++- 13 files changed, 300 insertions(+), 36 deletions(-) diff --git a/apps/preview-deployer-web/src/PreviewDeployerApp.test.tsx b/apps/preview-deployer-web/src/PreviewDeployerApp.test.tsx index 21f2b900d..4a366fdaa 100644 --- a/apps/preview-deployer-web/src/PreviewDeployerApp.test.tsx +++ b/apps/preview-deployer-web/src/PreviewDeployerApp.test.tsx @@ -27,7 +27,7 @@ beforeEach(() => { vi.mocked(api.searchBranches).mockResolvedValue([]); vi.mocked(api.searchCommits).mockResolvedValue([]); vi.mocked(api.createDeployment).mockResolvedValue({ - id: 'preview-1', + id: null, branch: 'master', status: 'queued', health: 'pending', @@ -35,7 +35,7 @@ beforeEach(() => { updatedAt: '2026-08-15T00:00:00Z', }); vi.mocked(api.uninstallDeployment).mockResolvedValue({ - id: 'preview-1', + id: '1', branch: 'master', status: 'uninstalling', health: 'pending', @@ -83,7 +83,7 @@ test('submits a branch with an optional commit hash', async () => { test('shows health and web url, then confirms uninstall', async () => { vi.mocked(api.listDeployments).mockResolvedValue([ { - id: 'preview-2', + id: '42', branch: 'feature/demo', resolvedCommit: '1234567890abcdef', status: 'running', @@ -98,6 +98,7 @@ test('shows health and web url, then confirms uninstall', async () => { expect(await screen.findByText('健康')).toBeTruthy(); expect(screen.getByText('端口 8400')).toBeTruthy(); + expect(screen.getByText('构建 #42')).toBeTruthy(); expect( screen.getByRole('link', { name: /打开 Web/u }).getAttribute('href'), ).toBe('http://192.168.35.82:8400'); @@ -107,7 +108,7 @@ test('shows health and web url, then confirms uninstall', async () => { fireEvent.click(screen.getByRole('button', { name: '确认卸载' })); await waitFor(() => { - expect(api.uninstallDeployment).toHaveBeenCalledWith('preview-2'); + expect(api.uninstallDeployment).toHaveBeenCalledWith('42'); }); }); diff --git a/apps/preview-deployer-web/src/PreviewDeployerApp.tsx b/apps/preview-deployer-web/src/PreviewDeployerApp.tsx index 45f7e7d80..ec5e30773 100644 --- a/apps/preview-deployer-web/src/PreviewDeployerApp.tsx +++ b/apps/preview-deployer-web/src/PreviewDeployerApp.tsx @@ -289,6 +289,9 @@ export function PreviewDeployerApp() { return; } const deployment = pendingUninstall; + if (!deployment.id) { + return; + } setPendingUninstall(null); setUninstallingId(deployment.id); setError(''); @@ -676,7 +679,10 @@ export function PreviewDeployerApp() {
{deployments.map((deployment) => ( setPendingUninstall(deployment)} @@ -774,6 +780,9 @@ function DeploymentCard({ {deployment.webPort ? ( 端口 {deployment.webPort} ) : null} + + 构建 #{deployment.id || '待分配'} +
@@ -811,7 +820,7 @@ function DeploymentCard({ 构建详情 ) : null} - {canUninstall ? ( + {canUninstall && deployment.id ? (