Merge pull request #550 from Dokploy/fix/env-parsing

fix(logs): improve logs in remote server when is error, and fix the e…
This commit is contained in:
Mauricio Siu 2024-10-13 11:01:28 -06:00 committed by GitHub
commit 35c084af1d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 54 additions and 11 deletions

View File

@ -35,6 +35,7 @@ import {
import { createTraefikConfig } from "@/server/utils/traefik/application";
import { TRPCError } from "@trpc/server";
import { eq } from "drizzle-orm";
import { encodeBase64 } from "../utils/docker/utils";
import { getDokployUrl } from "./admin";
import { createDeployment, updateDeploymentStatus } from "./deployment";
import { validUniqueServerAppName } from "./project";
@ -312,6 +313,17 @@ export const deployRemoteApplication = async ({
buildLink,
});
} catch (error) {
// @ts-ignore
const encodedContent = encodeBase64(error?.message);
await execAsyncRemote(
application.serverId,
`
echo "\n\n===================================EXTRA LOGS============================================" >> ${deployment.logPath};
echo "Error occurred ❌, check the logs for details." >> ${deployment.logPath};
echo "${encodedContent}" | base64 -d >> "${deployment.logPath}";`,
);
await updateDeploymentStatus(deployment.deploymentId, "error");
await updateApplicationStatus(applicationId, "error");
await sendBuildErrorNotifications({
@ -365,6 +377,17 @@ export const rebuildRemoteApplication = async ({
await updateDeploymentStatus(deployment.deploymentId, "done");
await updateApplicationStatus(applicationId, "done");
} catch (error) {
// @ts-ignore
const encodedContent = encodeBase64(error?.message);
await execAsyncRemote(
application.serverId,
`
echo "\n\n===================================EXTRA LOGS============================================" >> ${deployment.logPath};
echo "Error occurred ❌, check the logs for details." >> ${deployment.logPath};
echo "${encodedContent}" | base64 -d >> "${deployment.logPath}";`,
);
await updateDeploymentStatus(deployment.deploymentId, "error");
await updateApplicationStatus(applicationId, "error");
throw error;

View File

@ -41,6 +41,7 @@ import {
} from "@/server/utils/providers/raw";
import { TRPCError } from "@trpc/server";
import { eq } from "drizzle-orm";
import { encodeBase64 } from "../utils/docker/utils";
import { getDokployUrl } from "./admin";
import { createDeploymentCompose, updateDeploymentStatus } from "./deployment";
import { validUniqueServerAppName } from "./project";
@ -351,7 +352,16 @@ export const deployRemoteCompose = async ({
buildLink,
});
} catch (error) {
console.log(error);
// @ts-ignore
const encodedContent = encodeBase64(error?.message);
await execAsyncRemote(
compose.serverId,
`
echo "\n\n===================================EXTRA LOGS============================================" >> ${deployment.logPath};
echo "Error occurred ❌, check the logs for details." >> ${deployment.logPath};
echo "${encodedContent}" | base64 -d >> "${deployment.logPath}";`,
);
await updateDeploymentStatus(deployment.deploymentId, "error");
await updateCompose(composeId, {
composeStatus: "error",
@ -394,6 +404,16 @@ export const rebuildRemoteCompose = async ({
composeStatus: "done",
});
} catch (error) {
// @ts-ignore
const encodedContent = encodeBase64(error?.message);
await execAsyncRemote(
compose.serverId,
`
echo "\n\n===================================EXTRA LOGS============================================" >> ${deployment.logPath};
echo "Error occurred ❌, check the logs for details." >> ${deployment.logPath};
echo "${encodedContent}" | base64 -d >> "${deployment.logPath}";`,
);
await updateDeploymentStatus(deployment.deploymentId, "error");
await updateCompose(composeId, {
composeStatus: "error",

View File

@ -95,7 +95,7 @@ export const getDockerCommand = (
command += createEnvFileCommand(dockerFilePath, env);
}
command = `
command += `
echo "Building ${appName}" >> ${logPath};
cd ${dockerContextPath} >> ${logPath} 2>> ${logPath} || {
echo "❌ The path ${dockerContextPath} does not exist" >> ${logPath};

View File

@ -56,7 +56,7 @@ export const getHerokuCommand = (
];
for (const env of envVariables) {
args.push("--env", env);
args.push("--env", `'${env}'`);
}
const command = `pack ${args.join(" ")}`;

View File

@ -94,7 +94,7 @@ export const getNixpacksCommand = (
const args = ["build", buildAppDirectory, "--name", appName];
for (const env of envVariables) {
args.push("--env", env);
args.push("--env", `'${env}'`);
}
if (publishDirectory) {

View File

@ -55,7 +55,7 @@ export const getPaketoCommand = (
];
for (const env of envVariables) {
args.push("--env", env);
args.push("--env", `'${env}'`);
}
const command = `pack ${args.join(" ")}`;

View File

@ -1,6 +1,6 @@
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
import { dirname, join } from "node:path";
import { prepareEnvironmentVariables } from "../docker/utils";
import { encodeBase64, prepareEnvironmentVariables } from "../docker/utils";
export const createEnvFile = (directory: string, env: string | null) => {
const envFilePath = join(dirname(directory), ".env");
@ -12,10 +12,10 @@ export const createEnvFile = (directory: string, env: string | null) => {
};
export const createEnvFileCommand = (directory: string, env: string | null) => {
const envFilePath = join(dirname(directory), ".env");
if (!existsSync(dirname(envFilePath))) {
mkdirSync(dirname(envFilePath), { recursive: true });
}
const envFileContent = prepareEnvironmentVariables(env).join("\n");
return `echo "${envFileContent}" > ${envFilePath}`;
const encodedContent = encodeBase64(envFileContent || "");
const envFilePath = join(dirname(directory), ".env");
return `echo "${encodedContent}" | base64 -d > "${envFilePath}";`;
};