From da3cb5506fe80c2f540c74172524483c0bbe4341 Mon Sep 17 00:00:00 2001 From: David Kale Date: Wed, 22 Jul 2020 14:55:49 -0400 Subject: [PATCH] Fold logs for intermediate docker commands (#608) --- src/Runner.Worker/ActionManager.cs | 6 ++++-- src/Runner.Worker/ContainerOperationProvider.cs | 16 ++++++++++++++-- .../Handlers/ContainerActionHandler.cs | 5 ++++- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/Runner.Worker/ActionManager.cs b/src/Runner.Worker/ActionManager.cs index 0a942bf79..1a730130a 100644 --- a/src/Runner.Worker/ActionManager.cs +++ b/src/Runner.Worker/ActionManager.cs @@ -468,7 +468,7 @@ namespace GitHub.Runner.Worker ArgUtil.NotNull(setupInfo, nameof(setupInfo)); ArgUtil.NotNullOrEmpty(setupInfo.Container.Image, nameof(setupInfo.Container.Image)); - executionContext.Output($"Pull down action image '{setupInfo.Container.Image}'"); + executionContext.Output($"##[group]Pull down action image '{setupInfo.Container.Image}'"); // Pull down docker image with retry up to 3 times var dockerManger = HostContext.GetService(); @@ -492,6 +492,7 @@ namespace GitHub.Runner.Worker } } } + executionContext.Output("##[endgroup"); if (retryCount == 3 && pullExitCode != 0) { @@ -511,7 +512,7 @@ namespace GitHub.Runner.Worker ArgUtil.NotNull(setupInfo, nameof(setupInfo)); ArgUtil.NotNullOrEmpty(setupInfo.Container.Dockerfile, nameof(setupInfo.Container.Dockerfile)); - executionContext.Output($"Build container for action use: '{setupInfo.Container.Dockerfile}'."); + executionContext.Output($"##[group]Build container for action use: '{setupInfo.Container.Dockerfile}'."); // Build docker image with retry up to 3 times var dockerManger = HostContext.GetService(); @@ -541,6 +542,7 @@ namespace GitHub.Runner.Worker } } } + executionContext.Output("##[endgroup]"); if (retryCount == 3 && buildExitCode != 0) { diff --git a/src/Runner.Worker/ContainerOperationProvider.cs b/src/Runner.Worker/ContainerOperationProvider.cs index 2a27a731a..8ec8a9644 100644 --- a/src/Runner.Worker/ContainerOperationProvider.cs +++ b/src/Runner.Worker/ContainerOperationProvider.cs @@ -91,7 +91,10 @@ namespace GitHub.Runner.Worker #endif // Check docker client/server version + executionContext.Output("##[group]Checking docker version"); DockerVersion dockerVersion = await _dockerManger.DockerVersion(executionContext); + executionContext.Output("##[endgroup]"); + ArgUtil.NotNull(dockerVersion.ServerVersion, nameof(dockerVersion.ServerVersion)); ArgUtil.NotNull(dockerVersion.ClientVersion, nameof(dockerVersion.ClientVersion)); @@ -111,7 +114,7 @@ namespace GitHub.Runner.Worker } // Clean up containers left by previous runs - executionContext.Debug($"Delete stale containers from previous jobs"); + executionContext.Output("##[group]Clean up resources from previous jobs"); var staleContainers = await _dockerManger.DockerPS(executionContext, $"--all --quiet --no-trunc --filter \"label={_dockerManger.DockerInstanceLabel}\""); foreach (var staleContainer in staleContainers) { @@ -122,18 +125,20 @@ namespace GitHub.Runner.Worker } } - executionContext.Debug($"Delete stale container networks from previous jobs"); int networkPruneExitCode = await _dockerManger.DockerNetworkPrune(executionContext); if (networkPruneExitCode != 0) { executionContext.Warning($"Delete stale container networks failed, docker network prune fail with exit code {networkPruneExitCode}"); } + executionContext.Output("##[endgroup]"); // Create local docker network for this job to avoid port conflict when multiple runners run on same machine. // All containers within a job join the same network + executionContext.Output("##[group]Create local container network"); var containerNetwork = $"github_network_{Guid.NewGuid().ToString("N")}"; await CreateContainerNetworkAsync(executionContext, containerNetwork); executionContext.JobContext.Container["network"] = new StringContextData(containerNetwork); + executionContext.Output("##[endgroup]"); foreach (var container in containers) { @@ -141,10 +146,12 @@ namespace GitHub.Runner.Worker await StartContainerAsync(executionContext, container); } + executionContext.Output("##[group]Waiting for all services to be ready"); foreach (var container in containers.Where(c => !c.IsJobContainer)) { await ContainerHealthcheck(executionContext, container); } + executionContext.Output("##[endgroup]"); } public async Task StopContainersAsync(IExecutionContext executionContext, object data) @@ -173,6 +180,10 @@ namespace GitHub.Runner.Worker Trace.Info($"Container name: {container.ContainerName}"); Trace.Info($"Container image: {container.ContainerImage}"); Trace.Info($"Container options: {container.ContainerCreateOptions}"); + + var groupName = container.IsJobContainer ? "Starting job container" : $"Starting {container.ContainerNetworkAlias} service container"; + executionContext.Output($"##[group]{groupName}"); + foreach (var port in container.UserPortMappings) { Trace.Info($"User provided port: {port.Value}"); @@ -304,6 +315,7 @@ namespace GitHub.Runner.Worker container.ContainerRuntimePath = DockerUtil.ParsePathFromConfigEnv(containerEnv); executionContext.JobContext.Container["id"] = new StringContextData(container.ContainerId); } + executionContext.Output("##[endgroup]"); } private async Task StopContainerAsync(IExecutionContext executionContext, ContainerInfo container) diff --git a/src/Runner.Worker/Handlers/ContainerActionHandler.cs b/src/Runner.Worker/Handlers/ContainerActionHandler.cs index 573010030..6e8624510 100644 --- a/src/Runner.Worker/Handlers/ContainerActionHandler.cs +++ b/src/Runner.Worker/Handlers/ContainerActionHandler.cs @@ -49,8 +49,9 @@ namespace GitHub.Runner.Worker.Handlers // ensure docker file exist var dockerFile = Path.Combine(ActionDirectory, Data.Image); ArgUtil.File(dockerFile, nameof(Data.Image)); - ExecutionContext.Output($"Dockerfile for action: '{dockerFile}'."); + ExecutionContext.Output($"##[group]Building docker image"); + ExecutionContext.Output($"Dockerfile for action: '{dockerFile}'."); var imageName = $"{dockerManger.DockerInstanceLabel}:{ExecutionContext.Id.ToString("N")}"; var buildExitCode = await dockerManger.DockerBuild( ExecutionContext, @@ -58,6 +59,8 @@ namespace GitHub.Runner.Worker.Handlers dockerFile, Directory.GetParent(dockerFile).FullName, imageName); + ExecutionContext.Output("##[endgroup]"); + if (buildExitCode != 0) { throw new InvalidOperationException($"Docker build failed with exit code {buildExitCode}");