feat: 限制发布单重试边界
This commit is contained in:
@@ -382,7 +382,13 @@ describe('DeployRunsService', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('retries a deploy run with retry trigger', async () => {
|
it('retries a deploy run with retry trigger', async () => {
|
||||||
const { repository, service } = createService();
|
const failedRun: DeployRunSummary = {
|
||||||
|
...baseRun,
|
||||||
|
status: 'failed',
|
||||||
|
};
|
||||||
|
const { repository, service } = createService({
|
||||||
|
runs: [failedRun],
|
||||||
|
});
|
||||||
|
|
||||||
const run = await service.retryRun(baseRun.id);
|
const run = await service.retryRun(baseRun.id);
|
||||||
|
|
||||||
@@ -396,6 +402,15 @@ describe('DeployRunsService', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('rejects non-terminal retry requests before creating a new run', async () => {
|
||||||
|
const { repository, service } = createService();
|
||||||
|
|
||||||
|
await expect(service.retryRun(baseRun.id)).rejects.toBeInstanceOf(
|
||||||
|
AppError,
|
||||||
|
);
|
||||||
|
expect(repository.create).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
it('syncs all queued or running Jenkins runs with queue/build identifiers', async () => {
|
it('syncs all queued or running Jenkins runs with queue/build identifiers', async () => {
|
||||||
const queuedRun: DeployRunSummary = {
|
const queuedRun: DeployRunSummary = {
|
||||||
...baseRun,
|
...baseRun,
|
||||||
|
|||||||
@@ -111,6 +111,7 @@ export class DeployRunsService {
|
|||||||
projectKey: input.projectKey,
|
projectKey: input.projectKey,
|
||||||
environment: input.environment,
|
environment: input.environment,
|
||||||
ref: input.ref,
|
ref: input.ref,
|
||||||
|
trigger: input.trigger ?? 'manual',
|
||||||
remark: input.remark,
|
remark: input.remark,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@@ -182,6 +183,18 @@ export class DeployRunsService {
|
|||||||
): Promise<DeployRunSummary> {
|
): Promise<DeployRunSummary> {
|
||||||
const source = await this.getRun(id, user);
|
const source = await this.getRun(id, user);
|
||||||
|
|
||||||
|
if (!['failed', 'canceled'].includes(source.status)) {
|
||||||
|
throw new AppError(
|
||||||
|
'VALIDATION_FAILED',
|
||||||
|
`发布记录 ${id} 当前状态为 ${source.status},只能重试失败或已取消的发布单`,
|
||||||
|
400,
|
||||||
|
{
|
||||||
|
id,
|
||||||
|
status: source.status,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return this.createRun(
|
return this.createRun(
|
||||||
{
|
{
|
||||||
projectKey: source.projectKey,
|
projectKey: source.projectKey,
|
||||||
|
|||||||
Reference in New Issue
Block a user