diff --git a/executors/docker/executor_docker.go b/executors/docker/executor_docker.go index ba81c3e30871cda218d0429aed6e6fec4ac72995..f77709d3d0d88cee3e65e334104df54b2d0c4bae 100644 --- a/executors/docker/executor_docker.go +++ b/executors/docker/executor_docker.go @@ -622,13 +622,12 @@ func (s *executor) getServicesDefinitions() (common.Services, error) { for _, service := range s.Build.Services { serviceName := s.Build.GetAllVariables().ExpandValue(service.Name) - err := s.verifyAllowedImage(service.Name, "services", s.Config.Docker.AllowedServices, s.Config.Docker.Services) + err := s.verifyAllowedImage(serviceName, "services", s.Config.Docker.AllowedServices, s.Config.Docker.Services) if err != nil { return nil, err } service.Name = serviceName - serviceDefinitions = append(serviceDefinitions, service) } diff --git a/executors/docker/executor_docker_command_test.go b/executors/docker/executor_docker_command_test.go index 024a506ac6312d3aa27882dec00194d4436fef70..5962a88276ae7c07f728e7c1a4666869754a17b7 100644 --- a/executors/docker/executor_docker_command_test.go +++ b/executors/docker/executor_docker_command_test.go @@ -505,6 +505,72 @@ func TestCacheInContainer(t *testing.T) { assert.NotContains(t, output, skipCacheUpload, "Cache upload should be performed with policy: push") } +func TestDockerImageNameFromVariable(t *testing.T) { + if helpers.SkipIntegrationTests(t, "docker", "info") { + return + } + + successfulBuild, err := common.GetRemoteSuccessfulBuild() + successfulBuild.Variables = append(successfulBuild.Variables, common.JobVariable{ + Key: "CI_REGISTRY_IMAGE", + Value: "alpine", + }) + successfulBuild.Image = common.Image{ + Name: "$CI_REGISTRY_IMAGE", + } + assert.NoError(t, err) + build := &common.Build{ + JobResponse: successfulBuild, + Runner: &common.RunnerConfig{ + RunnerSettings: common.RunnerSettings{ + Executor: "docker", + Docker: &common.DockerConfig{ + Image: "alpine", + AllowedServices: []string{"alpine"}, + }, + }, + }, + } + + re := regexp.MustCompile("(?m)^ERROR: The [^ ]+ is not present on list of allowed images") + + output := runTestJobWithOutput(t, build) + assert.NotRegexp(t, re, output, "Image's name should be expanded from variable") +} + +func TestDockerServiceNameFromVariable(t *testing.T) { + if helpers.SkipIntegrationTests(t, "docker", "info") { + return + } + + successfulBuild, err := common.GetRemoteSuccessfulBuild() + successfulBuild.Variables = append(successfulBuild.Variables, common.JobVariable{ + Key: "CI_REGISTRY_IMAGE", + Value: "alpine", + }) + successfulBuild.Services = append(successfulBuild.Services, common.Image{ + Name: "$CI_REGISTRY_IMAGE", + }) + assert.NoError(t, err) + build := &common.Build{ + JobResponse: successfulBuild, + Runner: &common.RunnerConfig{ + RunnerSettings: common.RunnerSettings{ + Executor: "docker", + Docker: &common.DockerConfig{ + Image: "alpine", + AllowedServices: []string{"alpine"}, + }, + }, + }, + } + + re := regexp.MustCompile("(?m)^ERROR: The [^ ]+ is not present on list of allowed services") + + output := runTestJobWithOutput(t, build) + assert.NotRegexp(t, re, output, "Service's name should be expanded from variable") +} + func runDockerInDocker(version string) (id string, err error) { cmd := exec.Command("docker", "run", "--detach", "--privileged", "-p", "2375", "docker:"+version+"-dind") cmd.Stderr = os.Stderr