diff --git a/src/Runner.Worker/Container/DockerCommandManager.cs b/src/Runner.Worker/Container/DockerCommandManager.cs index a0c158bdf..4d4940c97 100644 --- a/src/Runner.Worker/Container/DockerCommandManager.cs +++ b/src/Runner.Worker/Container/DockerCommandManager.cs @@ -107,6 +107,7 @@ namespace GitHub.Runner.Worker.Container public async Task DockerCreate(IExecutionContext context, ContainerInfo container) { IList dockerOptions = new List(); + IDictionary environment = new Dictionary(); // OPTIONS dockerOptions.Add($"--name {container.ContainerDisplayName}"); dockerOptions.Add($"--label {DockerInstanceLabel}"); @@ -135,7 +136,8 @@ namespace GitHub.Runner.Worker.Container } else { - dockerOptions.Add(DockerUtil.CreateEscapedOption("-e", env.Key, env.Value)); + environment.Add(env.Key, env.Value); + dockerOptions.Add(DockerUtil.CreateEscapedOption("-e", env.Key)); } } @@ -183,7 +185,7 @@ namespace GitHub.Runner.Worker.Container dockerOptions.Add($"{container.ContainerEntryPointArgs}"); var optionsString = string.Join(" ", dockerOptions); - List outputStrings = await ExecuteDockerCommandAsync(context, "create", optionsString); + List outputStrings = await ExecuteDockerCommandAsync(context, "create", optionsString, environment); return outputStrings.FirstOrDefault(); } @@ -443,6 +445,11 @@ namespace GitHub.Runner.Worker.Container } private async Task> ExecuteDockerCommandAsync(IExecutionContext context, string command, string options) + { + return await ExecuteDockerCommandAsync(context, command, options, null); + } + + private async Task> ExecuteDockerCommandAsync(IExecutionContext context, string command, string options, IDictionary environment) { string arg = $"{command} {options}".Trim(); context.Command($"{DockerPath} {arg}"); @@ -470,7 +477,7 @@ namespace GitHub.Runner.Worker.Container workingDirectory: context.GetGitHubContext("workspace"), fileName: DockerPath, arguments: arg, - environment: null, + environment: environment, requireExitCodeZero: true, outputEncoding: null, cancellationToken: CancellationToken.None); diff --git a/src/Runner.Worker/Container/DockerUtil.cs b/src/Runner.Worker/Container/DockerUtil.cs index bde59f5b6..e1ae6d3ee 100644 --- a/src/Runner.Worker/Container/DockerUtil.cs +++ b/src/Runner.Worker/Container/DockerUtil.cs @@ -71,15 +71,6 @@ namespace GitHub.Runner.Worker.Container return $"{flag} \"{EscapeString(key)}\""; } - public static string CreateEscapedOption(string flag, string key, string value) - { - if (String.IsNullOrEmpty(key)) - { - return ""; - } - return $"{flag} \"{EscapeString(key)}={EscapeString(value)}\""; - } - private static string EscapeString(string value) { return value.Replace("\\", "\\\\").Replace("\"", "\\\""); diff --git a/src/Test/L0/Container/DockerUtilL0.cs b/src/Test/L0/Container/DockerUtilL0.cs index e5ae05fda..843aaf5ef 100644 --- a/src/Test/L0/Container/DockerUtilL0.cs +++ b/src/Test/L0/Container/DockerUtilL0.cs @@ -171,32 +171,5 @@ namespace GitHub.Runner.Common.Tests.Worker.Container } Assert.Equal(expected, actual); } - - [Theory] - [Trait("Level", "L0")] - [Trait("Category", "Worker")] - [InlineData("HOME", "", "HOME", "")] - [InlineData("HOME alpine:3.8 sh -c id #", "HOME alpine:3.8 sh -c id #", "HOME alpine:3.8 sh -c id #", "HOME alpine:3.8 sh -c id #")] - [InlineData("HOME \"alpine:3.8 sh -c id #", "HOME \"alpine:3.8 sh -c id #", "HOME \\\"alpine:3.8 sh -c id #", "HOME \\\"alpine:3.8 sh -c id #")] - [InlineData("HOME \\\"alpine:3.8 sh -c id #", "HOME \\\"alpine:3.8 sh -c id #", "HOME \\\\\\\"alpine:3.8 sh -c id #", "HOME \\\\\\\"alpine:3.8 sh -c id #")] - [InlineData("HOME \\\\\"alpine:3.8 sh -c id #", "HOME \\\\\"alpine:3.8 sh -c id #", "HOME \\\\\\\\\\\"alpine:3.8 sh -c id #", "HOME \\\\\\\\\\\"alpine:3.8 sh -c id #")] - [InlineData("HOME \"\"alpine:3.8 sh -c id #", "HOME \"\"alpine:3.8 sh -c id #", "HOME \\\"\\\"alpine:3.8 sh -c id #", "HOME \\\"\\\"alpine:3.8 sh -c id #")] - [InlineData("HOME \\\"\"alpine:3.8 sh -c id #", "HOME \\\"\"alpine:3.8 sh -c id #", "HOME \\\\\\\"\\\"alpine:3.8 sh -c id #", "HOME \\\\\\\"\\\"alpine:3.8 sh -c id #")] - [InlineData("HOME \"\\\"alpine:3.8 sh -c id #", "HOME \"\\\"alpine:3.8 sh -c id #", "HOME \\\"\\\\\\\"alpine:3.8 sh -c id #", "HOME \\\"\\\\\\\"alpine:3.8 sh -c id #")] - public void CreateEscapedOption_keyValue(string keyInput, string valueInput, string escapedKey, string escapedValue) - { - var flag = "--example"; - var actual = DockerUtil.CreateEscapedOption(flag, keyInput, valueInput); - string expected; - if (String.IsNullOrEmpty(keyInput)) - { - expected = ""; - } - else - { - expected = $"{flag} \"{escapedKey}={escapedValue}\""; - } - Assert.Equal(expected, actual); - } } }