Skip to content

Commit 886bb6c

Browse files
committed
fix(runner): register runner
1 parent a94cfef commit 886bb6c

File tree

4 files changed

+34
-7
lines changed

4 files changed

+34
-7
lines changed

api/runners/runners.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88
"encoding/json"
99
"encoding/pem"
1010
"fmt"
11+
"net/http"
12+
1113
"github.com/semaphoreui/semaphore/api/helpers"
1214
"github.com/semaphoreui/semaphore/db"
1315
"github.com/semaphoreui/semaphore/pkg/task_logger"
@@ -16,7 +18,6 @@ import (
1618
"github.com/semaphoreui/semaphore/services/tasks"
1719
"github.com/semaphoreui/semaphore/util"
1820
log "github.com/sirupsen/logrus"
19-
"net/http"
2021
)
2122

2223
func RunnerMiddleware(next http.Handler) http.Handler {
@@ -317,6 +318,11 @@ func RegisterRunner(w http.ResponseWriter, r *http.Request) {
317318
return
318319
}
319320

321+
log.WithFields(log.Fields{
322+
"runner_id": runner.ID,
323+
"context": "runner",
324+
}).Info("New runner registered")
325+
320326
var res struct {
321327
Token string `json:"token"`
322328
}

cli/cmd/runner_start.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package cmd
22

33
import (
4+
"time"
5+
46
"github.com/semaphoreui/semaphore/util"
57
"github.com/spf13/cobra"
68
)
@@ -20,16 +22,21 @@ func runRunner() {
2022

2123
taskPool := createRunnerJobPool()
2224

25+
// If --register is passed, try to register the runner if not already registered
2326
if runnerStartArgs.register {
2427

2528
initRunnerRegistrationToken()
2629

2730
if util.Config.Runner.Token == "" {
2831

29-
err := taskPool.Register(configFile)
32+
for {
33+
err := taskPool.Register(configFile)
34+
35+
if err == nil {
36+
break
37+
}
3038

31-
if err != nil {
32-
panic(err)
39+
time.Sleep(5 * time.Second)
3340
}
3441

3542
_ = util.ConfigInit(persistentFlags.configPath, persistentFlags.noConfig)

db_lib/AnsiblePlaybook.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func (p AnsiblePlaybook) RunPlaybook(args []string, environmentVars []string, in
4949
ptmx, err := pty.Start(cmd)
5050

5151
if err != nil {
52-
panic(err)
52+
return err
5353
}
5454

5555
go func() {

services/runners/job_pool.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,8 @@ func (p *JobPool) Unregister() (err error) {
150150
func (p *JobPool) Run() {
151151
logger := JobLogger{Context: "running"}
152152

153+
launched := false
154+
153155
if util.Config.Runner.Token == "" {
154156
logger.Panic(fmt.Errorf("no token provided"), "read input", "can not retrieve runner token")
155157
}
@@ -197,6 +199,9 @@ func (p *JobPool) Run() {
197199
}
198200

199201
if err != nil {
202+
logger.ActionError(err, "launch job", "job failed")
203+
t.job.Logger.Log("Unable to launch the application. Please contact your system administrator for assistance.")
204+
200205
if runningJob.status == task_logger.TaskStoppingStatus {
201206
runningJob.SetStatus(task_logger.TaskStoppedStatus)
202207
} else {
@@ -223,7 +228,12 @@ func (p *JobPool) Run() {
223228

224229
defer atomic.StoreInt32(&p.processing, 0)
225230

226-
p.sendProgress()
231+
ok := p.sendProgress()
232+
233+
if ok && !launched {
234+
launched = true
235+
fmt.Println("Runner connected")
236+
}
227237

228238
if util.Config.Runner.OneOff && len(p.runningJobs) > 0 && !p.hasRunningJobs() {
229239
os.Exit(0)
@@ -236,7 +246,7 @@ func (p *JobPool) Run() {
236246
}
237247
}
238248

239-
func (p *JobPool) sendProgress() {
249+
func (p *JobPool) sendProgress() (ok bool) {
240250

241251
logger := JobLogger{Context: "sending_progress"}
242252

@@ -288,9 +298,13 @@ func (p *JobPool) sendProgress() {
288298

289299
if resp.StatusCode >= 400 {
290300
logger.ActionError(fmt.Errorf("invalid status code"), "send request", "the server returned error "+strconv.Itoa(resp.StatusCode))
301+
} else {
302+
ok = true
291303
}
292304

293305
defer resp.Body.Close() //nolint:errcheck
306+
307+
return
294308
}
295309

296310
func (p *JobPool) getResponseErrorMessage(resp *http.Response) (res string) {

0 commit comments

Comments
 (0)