From 462b5117c88d2251cd5a88b805f62fb0b5c82f08 Mon Sep 17 00:00:00 2001 From: David Kale Date: Mon, 11 May 2020 13:57:31 -0400 Subject: [PATCH] docker build using -f instead of implied default (#471) * pass -f to docker build * Wrong place * build path * Also pass docker context path * Tidy up format * PR Feedback --- src/Runner.Worker/ActionManager.cs | 7 ++++++- src/Runner.Worker/Container/DockerCommandManager.cs | 6 +++--- src/Runner.Worker/Handlers/ContainerActionHandler.cs | 7 ++++++- src/Test/L0/Worker/ActionManagerL0.cs | 2 +- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/Runner.Worker/ActionManager.cs b/src/Runner.Worker/ActionManager.cs index 11242ab82..e60bb50ee 100644 --- a/src/Runner.Worker/ActionManager.cs +++ b/src/Runner.Worker/ActionManager.cs @@ -430,7 +430,12 @@ namespace GitHub.Runner.Worker var imageName = $"{dockerManger.DockerInstanceLabel}:{Guid.NewGuid().ToString("N")}"; while (retryCount < 3) { - buildExitCode = await dockerManger.DockerBuild(executionContext, setupInfo.Container.WorkingDirectory, Directory.GetParent(setupInfo.Container.Dockerfile).FullName, imageName); + buildExitCode = await dockerManger.DockerBuild( + executionContext, + setupInfo.Container.WorkingDirectory, + setupInfo.Container.Dockerfile, + Directory.GetParent(setupInfo.Container.Dockerfile).FullName, + imageName); if (buildExitCode == 0) { break; diff --git a/src/Runner.Worker/Container/DockerCommandManager.cs b/src/Runner.Worker/Container/DockerCommandManager.cs index 737c24852..fd2d10517 100644 --- a/src/Runner.Worker/Container/DockerCommandManager.cs +++ b/src/Runner.Worker/Container/DockerCommandManager.cs @@ -17,7 +17,7 @@ namespace GitHub.Runner.Worker.Container string DockerInstanceLabel { get; } Task DockerVersion(IExecutionContext context); Task DockerPull(IExecutionContext context, string image); - Task DockerBuild(IExecutionContext context, string workingDirectory, string dockerFile, string tag); + Task DockerBuild(IExecutionContext context, string workingDirectory, string dockerFile, string dockerContext, string tag); Task DockerCreate(IExecutionContext context, ContainerInfo container); Task DockerRun(IExecutionContext context, ContainerInfo container, EventHandler stdoutDataReceived, EventHandler stderrDataReceived); Task DockerStart(IExecutionContext context, string containerId); @@ -87,9 +87,9 @@ namespace GitHub.Runner.Worker.Container return await ExecuteDockerCommandAsync(context, "pull", image, context.CancellationToken); } - public async Task DockerBuild(IExecutionContext context, string workingDirectory, string dockerFile, string tag) + public async Task DockerBuild(IExecutionContext context, string workingDirectory, string dockerFile, string dockerContext, string tag) { - return await ExecuteDockerCommandAsync(context, "build", $"-t {tag} \"{dockerFile}\"", workingDirectory, context.CancellationToken); + return await ExecuteDockerCommandAsync(context, "build", $"-t {tag} -f \"{dockerFile}\" \"{dockerContext}\"", workingDirectory, context.CancellationToken); } public async Task DockerCreate(IExecutionContext context, ContainerInfo container) diff --git a/src/Runner.Worker/Handlers/ContainerActionHandler.cs b/src/Runner.Worker/Handlers/ContainerActionHandler.cs index 10059ec68..6e93d1919 100644 --- a/src/Runner.Worker/Handlers/ContainerActionHandler.cs +++ b/src/Runner.Worker/Handlers/ContainerActionHandler.cs @@ -52,7 +52,12 @@ namespace GitHub.Runner.Worker.Handlers ExecutionContext.Output($"Dockerfile for action: '{dockerFile}'."); var imageName = $"{dockerManger.DockerInstanceLabel}:{ExecutionContext.Id.ToString("N")}"; - var buildExitCode = await dockerManger.DockerBuild(ExecutionContext, ExecutionContext.GetGitHubContext("workspace"), Directory.GetParent(dockerFile).FullName, imageName); + var buildExitCode = await dockerManger.DockerBuild( + ExecutionContext, + ExecutionContext.GetGitHubContext("workspace"), + dockerFile, + Directory.GetParent(dockerFile).FullName, + imageName); if (buildExitCode != 0) { throw new InvalidOperationException($"Docker build failed with exit code {buildExitCode}"); diff --git a/src/Test/L0/Worker/ActionManagerL0.cs b/src/Test/L0/Worker/ActionManagerL0.cs index 9c41c0341..5be09a0ef 100644 --- a/src/Test/L0/Worker/ActionManagerL0.cs +++ b/src/Test/L0/Worker/ActionManagerL0.cs @@ -1966,7 +1966,7 @@ runs: _dockerManager.Setup(x => x.DockerPull(_ec.Object, "ubuntu:16.04")).Returns(Task.FromResult(0)); _dockerManager.Setup(x => x.DockerPull(_ec.Object, "ubuntu:100.04")).Returns(Task.FromResult(1)); - _dockerManager.Setup(x => x.DockerBuild(_ec.Object, It.IsAny(), It.IsAny(), It.IsAny())).Returns(Task.FromResult(0)); + _dockerManager.Setup(x => x.DockerBuild(_ec.Object, It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).Returns(Task.FromResult(0)); _pluginManager = new Mock(); _pluginManager.Setup(x => x.GetPluginAction(It.IsAny())).Returns(new RunnerPluginActionInfo() { PluginTypeName = "plugin.class, plugin", PostPluginTypeName = "plugin.cleanup, plugin" });