fix(deploy): use provider ws egress build cache

This commit is contained in:
Codex
2026-05-16 09:51:59 +00:00
parent 2a0da337f2
commit 2873a367d2
4 changed files with 34 additions and 16 deletions
+25 -10
View File
@@ -81,7 +81,7 @@ const k8sNamespace = "unidesk";
const k8sContainer = "unidesk-v8s-server";
const k8sKubeconfig = "/home/ubuntu/cq-deploy/.state/v8s/kubeconfig";
const v3sDeployDir = "/home/ubuntu/cq-deploy";
const dockerProxyUrl = "http://127.0.0.1:18789";
const providerGatewayWsEgressProxyUrl = "http://127.0.0.1:18789";
function nowIso(): string {
return new Date().toISOString();
@@ -276,14 +276,26 @@ function k8sManifestPath(service: UniDeskMicroserviceConfig): string {
function sourceProxyPrelude(service: UniDeskMicroserviceConfig): string {
if (targetIsMain(service)) return "";
return [
`build_proxy=${shellQuote(dockerProxyUrl)}`,
`build_proxy=${shellQuote(providerGatewayWsEgressProxyUrl)}`,
"export HTTP_PROXY=\"$build_proxy\" HTTPS_PROXY=\"$build_proxy\" ALL_PROXY=\"$build_proxy\"",
"export NO_PROXY=\"localhost,127.0.0.1,::1,host.docker.internal\"",
"curl -fsSI --max-time 20 -x \"$build_proxy\" https://github.com >/dev/null",
"echo target_build_proxy=provider-gateway-ws-egress:$build_proxy",
"echo target_build_proxy_probe=ok",
].join("\n");
}
function buildCachePrelude(dockerfileVariable: string): string[] {
return [
"cache_args=(--cache-to type=inline --build-arg BUILDKIT_INLINE_CACHE=1)",
"if docker image inspect \"$image\" >/dev/null 2>&1; then cache_args+=(--cache-from \"$image\"); echo target_build_cache_from_image=$image; else echo target_build_cache_from_image=missing:$image; fi",
"echo target_build_cache_to=inline",
"base_args=()",
"build_base_image=\"${image}-build-base\"",
`if grep -Eq '^ARG[[:space:]]+CODE_QUEUE_BASE_IMAGE([=[:space:]]|$)' "${dockerfileVariable}" 2>/dev/null; then if docker image inspect "$build_base_image" >/dev/null 2>&1; then base_args=(--build-arg "CODE_QUEUE_BASE_IMAGE=$build_base_image"); echo target_build_base_image=$build_base_image; else echo target_build_base_image=default; fi; else echo target_build_base_image=unsupported; fi`,
];
}
function prepareSourceScript(service: UniDeskMicroserviceConfig, desired: DeployManifestService, exportDir: string): string {
if (targetIsMain(service) && desired.repo === "https://github.com/pikasTech/unidesk") {
return [
@@ -363,21 +375,23 @@ function buildImageScript(service: UniDeskMicroserviceConfig, desired: DeployMan
? []
: [
"--network", "host",
"--build-arg", `HTTP_PROXY=${dockerProxyUrl}`,
"--build-arg", `HTTPS_PROXY=${dockerProxyUrl}`,
"--build-arg", `ALL_PROXY=${dockerProxyUrl}`,
"--build-arg", `HTTP_PROXY=${providerGatewayWsEgressProxyUrl}`,
"--build-arg", `HTTPS_PROXY=${providerGatewayWsEgressProxyUrl}`,
"--build-arg", `ALL_PROXY=${providerGatewayWsEgressProxyUrl}`,
"--build-arg", "NO_PROXY=localhost,127.0.0.1,::1,host.docker.internal",
];
return [
"set -euo pipefail",
sourceProxyPrelude(service),
`image=${shellQuote(image)}`,
`dockerfile=${shellQuote(dockerfile)}`,
"docker buildx version >/dev/null",
"builder_args=()",
"if docker buildx inspect --builder default >/dev/null 2>&1; then builder_args=(--builder default); echo target_build_builder=default; else echo target_build_builder=implicit; fi",
"docker buildx inspect \"${builder_args[@]}\" --bootstrap || true",
"echo target_build_builder_cleanup=not-required",
`docker buildx build "\${builder_args[@]}" --load ${[...proxyBuildArgs, ...commonArgs].map(shellQuote).join(" ")}`,
...buildCachePrelude("$dockerfile"),
`docker buildx build "\${builder_args[@]}" --load "\${cache_args[@]}" "\${base_args[@]}" ${[...proxyBuildArgs, ...commonArgs].map(shellQuote).join(" ")}`,
"docker image inspect \"$image\" --format 'image_id={{.Id}} labels={{json .Config.Labels}}'",
].filter((line) => line.length > 0).join("\n");
}
@@ -427,9 +441,9 @@ function buildDirectImageScript(service: UniDeskMicroserviceConfig, desired: Dep
? []
: [
"--network", "host",
"--build-arg", `HTTP_PROXY=${dockerProxyUrl}`,
"--build-arg", `HTTPS_PROXY=${dockerProxyUrl}`,
"--build-arg", `ALL_PROXY=${dockerProxyUrl}`,
"--build-arg", `HTTP_PROXY=${providerGatewayWsEgressProxyUrl}`,
"--build-arg", `HTTPS_PROXY=${providerGatewayWsEgressProxyUrl}`,
"--build-arg", `ALL_PROXY=${providerGatewayWsEgressProxyUrl}`,
"--build-arg", "NO_PROXY=localhost,127.0.0.1,::1,host.docker.internal",
];
const labelArgs = [
@@ -445,11 +459,12 @@ function buildDirectImageScript(service: UniDeskMicroserviceConfig, desired: Dep
"builder_args=()",
"if docker buildx inspect --builder default >/dev/null 2>&1; then builder_args=(--builder default); echo target_build_builder=default; else echo target_build_builder=implicit; fi",
"docker buildx inspect \"${builder_args[@]}\" --bootstrap || true",
...buildCachePrelude("$dockerfile_abs"),
"compose_build_args=()",
"while IFS= read -r item; do [ -n \"$item\" ] && compose_build_args+=(--build-arg \"$item\"); done < \"$build_args_file\"",
"target_args=()",
"if [ -n \"$build_target\" ]; then target_args=(--target \"$build_target\"); fi",
`docker buildx build "\${builder_args[@]}" --load ${[...proxyBuildArgs, ...labelArgs].map(shellQuote).join(" ")} "\${compose_build_args[@]}" "\${target_args[@]}" --progress=plain -t "$image" -f "$dockerfile_abs" "$build_context"`,
`docker buildx build "\${builder_args[@]}" --load "\${cache_args[@]}" "\${base_args[@]}" ${[...proxyBuildArgs, ...labelArgs].map(shellQuote).join(" ")} "\${compose_build_args[@]}" "\${target_args[@]}" --progress=plain -t "$image" -f "$dockerfile_abs" "$build_context"`,
"docker image inspect \"$image\" --format 'image_id={{.Id}} labels={{json .Config.Labels}}'",
].filter((line) => line.length > 0).join("\n");
}