mirror of
https://github.com/Dokploy/dokploy.git
synced 2026-06-15 20:25:23 +02:00
- Introduced a new KillBuild component that allows users to terminate ongoing Docker builds for both applications and compose setups. - Implemented corresponding API mutations in the application and compose routers to handle build termination requests. - Enhanced queue setup with a killDockerBuild function to execute the termination commands on the server.
76 lines
1.7 KiB
TypeScript
76 lines
1.7 KiB
TypeScript
import {
|
|
execAsync,
|
|
execAsyncRemote,
|
|
} from "@dokploy/server/utils/process/execAsync";
|
|
import { Queue } from "bullmq";
|
|
import { redisConfig } from "./redis-connection";
|
|
|
|
const myQueue = new Queue("deployments", {
|
|
connection: redisConfig,
|
|
});
|
|
|
|
process.on("SIGTERM", () => {
|
|
myQueue.close();
|
|
process.exit(0);
|
|
});
|
|
|
|
myQueue.on("error", (error) => {
|
|
if ((error as any).code === "ECONNREFUSED") {
|
|
console.error(
|
|
"Make sure you have installed Redis and it is running.",
|
|
error,
|
|
);
|
|
}
|
|
});
|
|
|
|
export const cleanQueuesByApplication = async (applicationId: string) => {
|
|
const jobs = await myQueue.getJobs(["waiting", "delayed"]);
|
|
|
|
for (const job of jobs) {
|
|
if (job?.data?.applicationId === applicationId) {
|
|
await job.remove();
|
|
console.log(`Removed job ${job.id} for application ${applicationId}`);
|
|
}
|
|
}
|
|
};
|
|
|
|
export const cleanQueuesByCompose = async (composeId: string) => {
|
|
const jobs = await myQueue.getJobs(["waiting", "delayed"]);
|
|
|
|
for (const job of jobs) {
|
|
if (job?.data?.composeId === composeId) {
|
|
await job.remove();
|
|
console.log(`Removed job ${job.id} for compose ${composeId}`);
|
|
}
|
|
}
|
|
};
|
|
|
|
export const killDockerBuild = async (
|
|
type: "application" | "compose",
|
|
serverId: string | null,
|
|
) => {
|
|
try {
|
|
if (type === "application") {
|
|
const command = `pkill -2 -f "docker build"`;
|
|
|
|
if (serverId) {
|
|
await execAsyncRemote(serverId, command);
|
|
} else {
|
|
await execAsync(command);
|
|
}
|
|
} else if (type === "compose") {
|
|
const command = `pkill -2 -f "docker compose"`;
|
|
|
|
if (serverId) {
|
|
await execAsyncRemote(serverId, command);
|
|
} else {
|
|
await execAsync(command);
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
};
|
|
|
|
export { myQueue };
|