in executors/docker/docker.go [1358:1421]
func (e *executor) Cleanup() {
if e.Config.Docker == nil {
// if there's no Docker config, we got here because Prepare() failed
// and there's nothing to cleanup.
return
}
e.SetCurrentStage(ExecutorStageCleanup)
var wg sync.WaitGroup
ctx, cancel := context.WithTimeout(context.Background(), dockerCleanupTimeout)
defer cancel()
remove := func(id string) {
wg.Add(1)
go func() {
_ = e.removeContainer(ctx, id)
wg.Done()
}()
}
for _, temporaryID := range e.temporary {
remove(temporaryID)
}
wg.Wait()
err := e.cleanupVolume(ctx)
if err != nil {
volumeLogger := e.BuildLogger.WithFields(logrus.Fields{
"error": err,
})
volumeLogger.Errorln("Failed to cleanup volumes")
}
err = e.cleanupNetwork(ctx)
if err != nil {
networkLogger := e.BuildLogger.WithFields(logrus.Fields{
"network": e.networkMode.NetworkName(),
"error": err,
})
networkLogger.Errorln("Failed to remove network for build")
}
if e.client != nil {
err = e.client.Close()
if err != nil {
clientCloseLogger := e.BuildLogger.WithFields(logrus.Fields{
"error": err,
})
clientCloseLogger.Debugln("Failed to close the client")
}
}
if e.tunnelClient != nil {
e.tunnelClient.Close()
}
e.AbstractExecutor.Cleanup()
}