in executors/kubernetes/kubernetes.go [838:899]
func (s *executor) ensurePodsConfigured(ctx context.Context) error {
if s.pod != nil {
return nil
}
if err := s.setupBuildNamespace(ctx); err != nil {
return fmt.Errorf("setting up build namespace: %w", err)
}
if err := s.setupCredentials(ctx); err != nil {
return fmt.Errorf("setting up credentials: %w", err)
}
initContainers, err := s.buildInitContainers()
if err != nil {
return err
}
if err := s.setupBuildPod(ctx, initContainers); err != nil {
return fmt.Errorf("setting up build pod: %w", err)
}
if s.Build.IsFeatureFlagOn(featureflags.PrintPodEvents) {
if err := s.handlePodEvents(); err != nil {
return err
}
}
var out io.WriteCloser = buildlogger.NewNopCloser(io.Discard)
if !s.Build.IsFeatureFlagOn(featureflags.PrintPodEvents) {
out = s.BuildLogger.Stream(buildlogger.StreamExecutorLevel, buildlogger.Stderr)
}
defer out.Close()
if err := s.waitForPod(ctx, out); err != nil {
return err
}
out.Close()
if err := s.setupTrappingScripts(ctx); err != nil {
return fmt.Errorf("setting up trapping scripts on emptyDir: %w", err)
}
// start pulling in logs from the build container, to capture entrypoint logs
if s.Build.IsFeatureFlagOn(featureflags.KubernetesHonorEntrypoint) {
err := s.captureContainerLogs(ctx, buildContainerName, &entrypointLogForwarder{
Sink: s.BuildLogger.Stream(buildlogger.StreamExecutorLevel, buildlogger.Stdout),
})
if err != nil {
return err
}
}
// This starts the log processing, where we run the helper bin (in the helper container) to pull logs from the
// logfile.
go s.processLogs(ctx)
// This pulls the services containers logs directly from the kubeapi and pushes them into the buildlogger.
s.captureServiceContainersLogs(ctx, s.pod.Spec.Containers)
return nil
}