pr feedback
parent
a60739249f
commit
0497076eba
|
|
@ -426,12 +426,15 @@ jobs:
|
|||
kubectl get pods -n default -o name 2>/dev/null | grep -E "(unity-builder-job-|helper-pod-)" | while read pod; do
|
||||
kubectl delete "$pod" --ignore-not-found=true || true
|
||||
done || true
|
||||
# Aggressive cleanup in k3d nodes
|
||||
# Aggressive cleanup in k3d nodes, but preserve Unity images
|
||||
K3D_NODE_CONTAINERS="${K3D_NODE_CONTAINERS:-k3d-unity-builder-agent-0 k3d-unity-builder-server-0}"
|
||||
for NODE in $K3D_NODE_CONTAINERS; do
|
||||
# Remove stopped containers
|
||||
docker exec "$NODE" sh -c "crictl rm --all 2>/dev/null || true" || true
|
||||
# Remove non-Unity images only (preserve unityci/editor images to avoid re-pulling 3.9GB)
|
||||
docker exec "$NODE" sh -c "for img in \$(crictl images -q 2>/dev/null); do repo=\$(crictl inspecti \$img --format '{{.repo}}' 2>/dev/null || echo ''); if echo \"\$repo\" | grep -qvE 'unityci/editor|unity'; then crictl rmi \$img 2>/dev/null || true; fi; done" || true
|
||||
# Clean up unused layers
|
||||
docker exec "$NODE" sh -c "crictl rmi --prune 2>/dev/null || true" || true
|
||||
docker exec "$NODE" sh -c "crictl images -q | xargs -r crictl rmi 2>/dev/null || true" || true
|
||||
done || true
|
||||
rm -rf ./cloud-runner-cache/* || true
|
||||
docker system prune -f || true
|
||||
|
|
@ -491,18 +494,16 @@ jobs:
|
|||
done || true
|
||||
rm -rf ./cloud-runner-cache/* || true
|
||||
docker system prune -af --volumes || true
|
||||
# Aggressive cleanup in k3d nodes to free ephemeral storage
|
||||
# Aggressive cleanup in k3d nodes to free ephemeral storage, but preserve Unity images
|
||||
K3D_NODE_CONTAINERS="${K3D_NODE_CONTAINERS:-k3d-unity-builder-agent-0 k3d-unity-builder-server-0}"
|
||||
for NODE in $K3D_NODE_CONTAINERS; do
|
||||
echo "Cleaning up $NODE..."
|
||||
echo "Cleaning up $NODE (preserving Unity images)..."
|
||||
# Remove all stopped containers
|
||||
docker exec "$NODE" sh -c "crictl rm --all 2>/dev/null || true" || true
|
||||
# Remove all unused images
|
||||
# Remove non-Unity images only (preserve unityci/editor images to avoid re-pulling 3.9GB)
|
||||
docker exec "$NODE" sh -c "for img in \$(crictl images -q 2>/dev/null); do repo=\$(crictl inspecti \$img --format '{{.repo}}' 2>/dev/null || echo ''); if echo \"\$repo\" | grep -qvE 'unityci/editor|unity'; then crictl rmi \$img 2>/dev/null || true; fi; done" || true
|
||||
# Clean up unused layers (prune should preserve referenced images)
|
||||
docker exec "$NODE" sh -c "crictl rmi --prune 2>/dev/null || true" || true
|
||||
# Remove all images (more aggressive)
|
||||
docker exec "$NODE" sh -c "crictl images -q | xargs -r crictl rmi 2>/dev/null || true" || true
|
||||
# Clean up containerd content store
|
||||
docker exec "$NODE" sh -c "crictl images --prune 2>/dev/null || true" || true
|
||||
# Check disk space
|
||||
docker exec "$NODE" sh -c "df -h /var/lib/rancher/k3s 2>/dev/null || df -h / 2>/dev/null || true" || true
|
||||
done
|
||||
|
|
|
|||
|
|
@ -3752,22 +3752,27 @@ class Kubernetes {
|
|||
this.containerName = `main`;
|
||||
await kubernetes_secret_1.default.createSecret(secrets, this.secretName, this.namespace, this.kubeClient);
|
||||
// For tests, clean up old images before creating job to free space for image pull
|
||||
// IMPORTANT: Preserve the Unity image to avoid re-pulling it
|
||||
if (process.env['cloudRunnerTests'] === 'true') {
|
||||
try {
|
||||
cloud_runner_logger_1.default.log('Cleaning up old images in k3d node before pulling new image...');
|
||||
const { CloudRunnerSystem } = await Promise.resolve().then(() => __importStar(__nccwpck_require__(4197)));
|
||||
// More aggressive cleanup: remove all stopped containers, unused images, and containerd snapshots
|
||||
// Extract image name without tag for matching
|
||||
const imageName = image.split(':')[0];
|
||||
const imageTag = image.split(':')[1] || 'latest';
|
||||
// More targeted cleanup: remove stopped containers and non-Unity images
|
||||
// IMPORTANT: Preserve Unity images to avoid re-pulling the 3.9GB image
|
||||
const cleanupCommands = [
|
||||
// Remove all stopped containers
|
||||
// Remove all stopped containers (this frees runtime space but keeps images)
|
||||
'docker exec k3d-unity-builder-agent-0 sh -c "crictl rm --all 2>/dev/null || true" || true',
|
||||
// Remove all unused images (more aggressive)
|
||||
'docker exec k3d-unity-builder-server-0 sh -c "crictl rm --all 2>/dev/null || true" || true',
|
||||
// Remove non-Unity images only (preserve unityci/editor images)
|
||||
// List all images, filter out Unity images, then remove the rest
|
||||
'docker exec k3d-unity-builder-agent-0 sh -c "crictl images --format \\"table {{.ID}}\\t{{.Repository}}\\" 2>/dev/null | grep -vE \\"unityci/editor|unity|IMAGE\\" | awk \\"{print \\$1}\\" | xargs -r crictl rmi 2>/dev/null || true" || true',
|
||||
'docker exec k3d-unity-builder-server-0 sh -c "crictl images --format \\"table {{.ID}}\\t{{.Repository}}\\" 2>/dev/null | grep -vE \\"unityci/editor|unity|IMAGE\\" | awk \\"{print \\$1}\\" | xargs -r crictl rmi 2>/dev/null || true" || true',
|
||||
// Clean up unused layers/snapshots (prune should preserve referenced images)
|
||||
'docker exec k3d-unity-builder-agent-0 sh -c "crictl rmi --prune 2>/dev/null || true" || true',
|
||||
// Remove all images except the one we might need (if any)
|
||||
'docker exec k3d-unity-builder-agent-0 sh -c "crictl images -q | xargs -r crictl rmi 2>/dev/null || true" || true',
|
||||
// Clean up containerd snapshots and layers
|
||||
'docker exec k3d-unity-builder-agent-0 sh -c "crictl rmi --prune --all 2>/dev/null || true" || true',
|
||||
// Clean up containerd content store (removes unused layers)
|
||||
'docker exec k3d-unity-builder-agent-0 sh -c "crictl images --prune 2>/dev/null || true" || true',
|
||||
'docker exec k3d-unity-builder-server-0 sh -c "crictl rmi --prune 2>/dev/null || true" || true',
|
||||
];
|
||||
for (const cmd of cleanupCommands) {
|
||||
try {
|
||||
|
|
@ -3778,6 +3783,14 @@ class Kubernetes {
|
|||
cloud_runner_logger_1.default.log(`Cleanup command failed (non-fatal): ${cmdError}`);
|
||||
}
|
||||
}
|
||||
// Verify Unity image is still cached
|
||||
try {
|
||||
const unityImageCheck = await CloudRunnerSystem.Run(`docker exec k3d-unity-builder-agent-0 sh -c "crictl images | grep unityci/editor || echo 'Unity image not found in agent'" || true`, true, true);
|
||||
cloud_runner_logger_1.default.log(`Unity image cache status:\n${unityImageCheck}`);
|
||||
}
|
||||
catch {
|
||||
// Ignore check failures
|
||||
}
|
||||
// Check disk space after cleanup
|
||||
try {
|
||||
const diskCheck = await CloudRunnerSystem.Run('docker exec k3d-unity-builder-agent-0 sh -c "df -h /var/lib/rancher/k3s 2>/dev/null || df -h / 2>/dev/null || true" || true', true, true);
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -157,22 +157,29 @@ class Kubernetes implements ProviderInterface {
|
|||
await KubernetesSecret.createSecret(secrets, this.secretName, this.namespace, this.kubeClient);
|
||||
|
||||
// For tests, clean up old images before creating job to free space for image pull
|
||||
// IMPORTANT: Preserve the Unity image to avoid re-pulling it
|
||||
if (process.env['cloudRunnerTests'] === 'true') {
|
||||
try {
|
||||
CloudRunnerLogger.log('Cleaning up old images in k3d node before pulling new image...');
|
||||
const { CloudRunnerSystem } = await import('../../services/core/cloud-runner-system');
|
||||
// More aggressive cleanup: remove all stopped containers, unused images, and containerd snapshots
|
||||
|
||||
// Extract image name without tag for matching
|
||||
const imageName = image.split(':')[0];
|
||||
const imageTag = image.split(':')[1] || 'latest';
|
||||
|
||||
// More targeted cleanup: remove stopped containers and non-Unity images
|
||||
// IMPORTANT: Preserve Unity images to avoid re-pulling the 3.9GB image
|
||||
const cleanupCommands = [
|
||||
// Remove all stopped containers
|
||||
// Remove all stopped containers (this frees runtime space but keeps images)
|
||||
'docker exec k3d-unity-builder-agent-0 sh -c "crictl rm --all 2>/dev/null || true" || true',
|
||||
// Remove all unused images (more aggressive)
|
||||
'docker exec k3d-unity-builder-server-0 sh -c "crictl rm --all 2>/dev/null || true" || true',
|
||||
// Remove non-Unity images only (preserve unityci/editor images)
|
||||
// List all images, filter out Unity images, then remove the rest
|
||||
'docker exec k3d-unity-builder-agent-0 sh -c "crictl images --format \\"table {{.ID}}\\t{{.Repository}}\\" 2>/dev/null | grep -vE \\"unityci/editor|unity|IMAGE\\" | awk \\"{print \\$1}\\" | xargs -r crictl rmi 2>/dev/null || true" || true',
|
||||
'docker exec k3d-unity-builder-server-0 sh -c "crictl images --format \\"table {{.ID}}\\t{{.Repository}}\\" 2>/dev/null | grep -vE \\"unityci/editor|unity|IMAGE\\" | awk \\"{print \\$1}\\" | xargs -r crictl rmi 2>/dev/null || true" || true',
|
||||
// Clean up unused layers/snapshots (prune should preserve referenced images)
|
||||
'docker exec k3d-unity-builder-agent-0 sh -c "crictl rmi --prune 2>/dev/null || true" || true',
|
||||
// Remove all images except the one we might need (if any)
|
||||
'docker exec k3d-unity-builder-agent-0 sh -c "crictl images -q | xargs -r crictl rmi 2>/dev/null || true" || true',
|
||||
// Clean up containerd snapshots and layers
|
||||
'docker exec k3d-unity-builder-agent-0 sh -c "crictl rmi --prune --all 2>/dev/null || true" || true',
|
||||
// Clean up containerd content store (removes unused layers)
|
||||
'docker exec k3d-unity-builder-agent-0 sh -c "crictl images --prune 2>/dev/null || true" || true',
|
||||
'docker exec k3d-unity-builder-server-0 sh -c "crictl rmi --prune 2>/dev/null || true" || true',
|
||||
];
|
||||
|
||||
for (const cmd of cleanupCommands) {
|
||||
|
|
@ -184,6 +191,18 @@ class Kubernetes implements ProviderInterface {
|
|||
}
|
||||
}
|
||||
|
||||
// Verify Unity image is still cached
|
||||
try {
|
||||
const unityImageCheck = await CloudRunnerSystem.Run(
|
||||
`docker exec k3d-unity-builder-agent-0 sh -c "crictl images | grep unityci/editor || echo 'Unity image not found in agent'" || true`,
|
||||
true,
|
||||
true,
|
||||
);
|
||||
CloudRunnerLogger.log(`Unity image cache status:\n${unityImageCheck}`);
|
||||
} catch {
|
||||
// Ignore check failures
|
||||
}
|
||||
|
||||
// Check disk space after cleanup
|
||||
try {
|
||||
const diskCheck = await CloudRunnerSystem.Run(
|
||||
|
|
|
|||
|
|
@ -48,6 +48,38 @@ describe('Cloud Runner Retain Workspace', () => {
|
|||
|
||||
CloudRunnerLogger.log(`run 1 succeeded`);
|
||||
|
||||
// Clean up k3d node between builds to free space, but preserve Unity image
|
||||
if (CloudRunnerOptions.providerStrategy === 'k8s') {
|
||||
try {
|
||||
CloudRunnerLogger.log('Cleaning up k3d node between builds (preserving Unity image)...');
|
||||
const K3D_NODE_CONTAINERS = ['k3d-unity-builder-agent-0', 'k3d-unity-builder-server-0'];
|
||||
for (const NODE of K3D_NODE_CONTAINERS) {
|
||||
// Remove stopped containers but keep images
|
||||
await CloudRunnerSystem.Run(
|
||||
`docker exec ${NODE} sh -c "crictl rm --all 2>/dev/null || true" || true`,
|
||||
true,
|
||||
true,
|
||||
);
|
||||
// Remove non-Unity images only (preserve unityci/editor images)
|
||||
await CloudRunnerSystem.Run(
|
||||
`docker exec ${NODE} sh -c "crictl images --format 'table {{.ID}}\\t{{.Repository}}' 2>/dev/null | grep -vE 'unityci/editor|unity|IMAGE' | awk '{print \\$1}' | xargs -r crictl rmi 2>/dev/null || true" || true`,
|
||||
true,
|
||||
true,
|
||||
);
|
||||
// Clean up unused layers
|
||||
await CloudRunnerSystem.Run(
|
||||
`docker exec ${NODE} sh -c "crictl rmi --prune 2>/dev/null || true" || true`,
|
||||
true,
|
||||
true,
|
||||
);
|
||||
}
|
||||
CloudRunnerLogger.log('Cleanup between builds completed');
|
||||
} catch (cleanupError) {
|
||||
CloudRunnerLogger.logWarning(`Failed to cleanup between builds: ${cleanupError}`);
|
||||
// Continue anyway
|
||||
}
|
||||
}
|
||||
|
||||
// await CloudRunnerSystem.Run(`tree -d ./cloud-runner-cache/${}`);
|
||||
const buildParameter2 = await CreateParameters(overrides);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue