Просмотр исходного кода

Bug ignored signals (#257)

* bugfix: Signals, like SIGKILL etc were ignored. Now we capture them and add the err to stderr

* bugfix: Signals, like SIGKILL etc were ignored. Now we capture them and add the err to stderr
James Read 2 лет назад
Родитель
Сommit
ce670cf58c
1 измененных файлов с 12 добавлено и 13 удалено
  1. 12 13
      internal/executor/executor.go

+ 12 - 13
internal/executor/executor.go

@@ -275,6 +275,12 @@ func wrapCommandInShell(ctx context.Context, finalParsedCommand string) *exec.Cm
 	return exec.CommandContext(ctx, "sh", "-c", finalParsedCommand)
 	return exec.CommandContext(ctx, "sh", "-c", finalParsedCommand)
 }
 }
 
 
+func appendErrorToStderr(err error, logEntry *InternalLogEntry) {
+	if err != nil {
+		logEntry.Stderr = err.Error() + "\n\n" + logEntry.Stderr
+	}
+}
+
 func stepExec(req *ExecutionRequest) bool {
 func stepExec(req *ExecutionRequest) bool {
 	ctx, cancel := context.WithTimeout(context.Background(), time.Duration(req.Action.Timeout)*time.Second)
 	ctx, cancel := context.WithTimeout(context.Background(), time.Duration(req.Action.Timeout)*time.Second)
 	defer cancel()
 	defer cancel()
@@ -292,18 +298,14 @@ func stepExec(req *ExecutionRequest) bool {
 
 
 	runerr := cmd.Start()
 	runerr := cmd.Start()
 
 
-	cmd.Wait()
-
-	// req.logEntry.Stdout = req.logEntry.StdoutBuffer.String()
-	// req.logEntry.Stderr = req.logEntry.StderrBuffer.String()
+	waiterr := cmd.Wait()
 
 
 	req.logEntry.ExitCode = int32(cmd.ProcessState.ExitCode())
 	req.logEntry.ExitCode = int32(cmd.ProcessState.ExitCode())
 	req.logEntry.Stdout = stdout.String()
 	req.logEntry.Stdout = stdout.String()
 	req.logEntry.Stderr = stderr.String()
 	req.logEntry.Stderr = stderr.String()
 
 
-	if runerr != nil {
-		req.logEntry.Stderr = runerr.Error() + "\n\n" + req.logEntry.Stderr
-	}
+	appendErrorToStderr(runerr, req.logEntry)
+	appendErrorToStderr(waiterr, req.logEntry)
 
 
 	if ctx.Err() == context.DeadlineExceeded {
 	if ctx.Err() == context.DeadlineExceeded {
 		req.logEntry.TimedOut = true
 		req.logEntry.TimedOut = true
@@ -336,19 +338,16 @@ func stepExecAfter(req *ExecutionRequest) bool {
 	cmd := wrapCommandInShell(ctx, finalParsedCommand)
 	cmd := wrapCommandInShell(ctx, finalParsedCommand)
 	cmd.Stdout = &stdout
 	cmd.Stdout = &stdout
 	cmd.Stderr = &stderr
 	cmd.Stderr = &stderr
-	req.logEntry.StdoutBuffer, _ = cmd.StdoutPipe()
-	req.logEntry.StderrBuffer, _ = cmd.StderrPipe()
 
 
 	runerr := cmd.Start()
 	runerr := cmd.Start()
 
 
-	cmd.Wait()
+	waiterr := cmd.Wait()
 
 
 	req.logEntry.Stdout += "---\n" + stdout.String()
 	req.logEntry.Stdout += "---\n" + stdout.String()
 	req.logEntry.Stderr += "---\n" + stderr.String()
 	req.logEntry.Stderr += "---\n" + stderr.String()
 
 
-	if runerr != nil {
-		req.logEntry.Stderr = runerr.Error() + "\n\n" + req.logEntry.Stderr
-	}
+	appendErrorToStderr(runerr, req.logEntry)
+	appendErrorToStderr(waiterr, req.logEntry)
 
 
 	if ctx.Err() == context.DeadlineExceeded {
 	if ctx.Err() == context.DeadlineExceeded {
 		req.logEntry.Stderr += "Your shellAfterCommand command timed out."
 		req.logEntry.Stderr += "Your shellAfterCommand command timed out."