fix(deploy): use provider ws egress build cache
This commit is contained in:
+25
-10
@@ -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");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user