mirror of
https://github.com/game-ci/unity-builder.git
synced 2026-02-02 22:59:06 +08:00
pr feedback
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user