in commands/multi.go [166:225]
func (mr *RunCommand) Start(_ service.Service) error {
mr.abortBuilds = make(chan os.Signal)
mr.runInterruptSignal = make(chan os.Signal, 1)
mr.reloadSignal = make(chan os.Signal, 1)
mr.configReloaded = make(chan int, 1)
mr.runFinished = make(chan bool, 1)
mr.stopSignals = make(chan os.Signal)
mr.log().Info("Starting multi-runner from ", mr.ConfigFile, "...")
mr.setupInternalMetrics()
userModeWarning(false)
if mr.WorkingDirectory != "" {
err := os.Chdir(mr.WorkingDirectory)
if err != nil {
return err
}
}
err := mr.reloadConfig()
if err != nil {
return err
}
config := mr.getConfig()
for _, runner := range config.Runners {
mr.runnerWorkersFeeds.WithLabelValues(runner.ShortDescription(), runner.Name, runner.GetSystemID()).Add(0)
mr.runnerWorkersFeedFailures.
WithLabelValues(runner.ShortDescription(), runner.Name, runner.GetSystemID()).
Add(0)
mr.runnerWorkerProcessingFailure.
WithLabelValues(
workerProcessingFailureOther,
runner.ShortDescription(), runner.Name, runner.GetSystemID(),
).
Add(0)
mr.runnerWorkerProcessingFailure.
WithLabelValues(
workerProcessingFailureNoFreeExecutor,
runner.ShortDescription(), runner.Name, runner.GetSystemID(),
).
Add(0)
mr.runnerWorkerProcessingFailure.
WithLabelValues(
workerProcessingFailureJobFailure,
runner.ShortDescription(), runner.Name, runner.GetSystemID(),
).
Add(0)
}
mr.runnerWorkerSlots.Set(0)
mr.runnerWorkerSlotOperations.WithLabelValues(workerSlotOperationStarted).Add(0)
mr.runnerWorkerSlotOperations.WithLabelValues(workerSlotOperationStopped).Add(0)
// Start should not block. Do the actual work async.
go mr.run()
return nil
}