in executors/kubernetes/kubernetes.go [3156:3203]
func (s *executor) waitForServices(ctx context.Context) error {
portArgs := ""
for _, name := range s.options.getSortedServiceNames() {
service := s.options.Services[name]
port := service.Variables.Get("HEALTHCHECK_TCP_PORT")
if port == "" {
continue
}
portArgs += fmt.Sprintf("--port '%s' ", port)
}
if portArgs == "" {
return nil
}
command := "gitlab-runner-helper health-check " + portArgs
var err error
if s.Build.IsFeatureFlagOn(featureflags.UseLegacyKubernetesExecutionStrategy) {
err = s.setupPodLegacy(ctx)
} else {
err = s.ensurePodsConfigured(ctx)
}
if err != nil {
return err
}
podStatusCh := s.watchPodStatus(ctx, &podContainerStatusChecker{})
stdout, stderr := s.getExecutorIoWriters()
defer stdout.Close()
defer stderr.Close()
select {
case err := <-s.runInContainerWithExec(ctx, helperContainerName, s.BuildShell.DockerCommand, command, stdout, stderr):
s.BuildLogger.Debugln(fmt.Sprintf("Container helper exited with error: %v", err))
var exitError exec.CodeExitError
if err != nil && errors.As(err, &exitError) {
return &common.BuildError{Inner: err, ExitCode: exitError.ExitStatus()}
}
case err := <-podStatusCh:
s.BuildLogger.Println("Health check aborted due to error: ", err.Error())
return err
case <-ctx.Done():
return fmt.Errorf("health check aborted")
}
return nil
}