diff --git a/src/Runner.Worker/JobExtension.cs b/src/Runner.Worker/JobExtension.cs index c210ebeb80a..214946d6bff 100644 --- a/src/Runner.Worker/JobExtension.cs +++ b/src/Runner.Worker/JobExtension.cs @@ -536,6 +536,28 @@ public async Task FinalizeJob(IExecutionContext jobContext, Pipelines.AgentJobRe context.Start(); context.Debug("Starting: Complete job"); + // Tear down bind mount /mnt/foo1 + Trace.Info("Tearing down bind mount."); + try + { + var umountProcess = HostContext.CreateService(); + umountProcess.OutputDataReceived += (_, data) => Trace.Info(data.Data); + umountProcess.ErrorDataReceived += (_, data) => Trace.Error(data.Data); + await umountProcess.ExecuteAsync( + workingDirectory: "/", + fileName: "umount", + arguments: "/mnt/foo1", + environment: null, + requireExitCodeZero: false, + cancellationToken: jobContext.CancellationToken); + Trace.Info("Bind mount /mnt/foo1 unmounted successfully."); + } + catch (Exception ex) + { + Trace.Warning($"Failed to unmount bind mount: {ex.Message}"); + context.Warning($"Failed to unmount /mnt/foo1: {ex.Message}"); + } + Trace.Info("Initialize Env context"); #if OS_WINDOWS diff --git a/src/Runner.Worker/JobRunner.cs b/src/Runner.Worker/JobRunner.cs index 72ee5a403ad..30107101541 100644 --- a/src/Runner.Worker/JobRunner.cs +++ b/src/Runner.Worker/JobRunner.cs @@ -178,6 +178,33 @@ public async Task RunAsync(AgentJobRequestMessage message, Cancellat _tempDirectoryManager = HostContext.GetService(); _tempDirectoryManager.InitializeTempDirectory(jobContext); + // Create bind mount /mnt/foo1 -> /tmp/foo1 (Linux only) + if (Constants.Runner.Platform == Constants.OSPlatform.Linux) + { + Trace.Info("Setting up bind mount."); + try + { + Directory.CreateDirectory("/tmp/foo1"); + Directory.CreateDirectory("/mnt/foo1"); + var mountProcess = HostContext.CreateService(); + mountProcess.OutputDataReceived += (_, data) => Trace.Info(data.Data); + mountProcess.ErrorDataReceived += (_, data) => Trace.Error(data.Data); + await mountProcess.ExecuteAsync( + workingDirectory: workDirectory, + fileName: "mount", + arguments: "--bind /tmp/foo1 /mnt/foo1", + environment: null, + requireExitCodeZero: true, + cancellationToken: jobContext.CancellationToken); + Trace.Info("Bind mount /mnt/foo1 -> /tmp/foo1 created successfully."); + } + catch (Exception ex) + { + Trace.Warning($"Failed to create bind mount: {ex.Message}"); + jobContext.Warning($"Failed to create bind mount /mnt/foo1: {ex.Message}"); + } + } + // Get the job extension. Trace.Info("Getting job extension."); IJobExtension jobExtension = HostContext.CreateService();