exit after first error (#123)

Closes #121 

WIP
This commit is contained in:
Marco Vito Moscaritolo 2018-09-26 09:23:31 +02:00 committed by Bo-Yi Wu
parent 6c0b475c15
commit 3499506089
2 changed files with 28 additions and 2 deletions

View File

@ -92,6 +92,11 @@ func main() {
Usage: "execute commands",
EnvVar: "PLUGIN_SCRIPT,SSH_SCRIPT",
},
cli.BoolFlag{
Name: "script.stop",
Usage: "stop script after first failure",
EnvVar: "PLUGIN_SCRIPT_STOP",
},
cli.StringFlag{
Name: "proxy.ssh-key",
Usage: "private ssh key of proxy",
@ -197,6 +202,7 @@ func run(c *cli.Context) error {
Timeout: c.Duration("timeout"),
CommandTimeout: c.Int("command.timeout"),
Script: c.StringSlice("script"),
ScriptStop: c.Bool("script.stop"),
Secrets: c.StringSlice("secrets"),
Envs: c.StringSlice("envs"),
Debug: c.Bool("debug"),

View File

@ -2,6 +2,7 @@ package main
import (
"fmt"
"io"
"os"
"strconv"
"strings"
@ -9,7 +10,6 @@ import (
"time"
"github.com/appleboy/easyssh-proxy"
"io"
)
const (
@ -31,6 +31,7 @@ type (
Timeout time.Duration
CommandTimeout int
Script []string
ScriptStop bool
Secrets []string
Envs []string
Proxy easyssh.DefaultConfig
@ -82,7 +83,7 @@ func (p Plugin) exec(host string, wg *sync.WaitGroup, errChannel chan error) {
}
}
p.Config.Script = append(env, p.Config.Script...)
p.Config.Script = append(env, p.scriptCommands()...)
if p.Config.Debug {
p.log(host, "======ENV======")
@ -179,3 +180,22 @@ func (p Plugin) Exec() error {
return nil
}
func (p Plugin) scriptCommands() []string {
numCommands := len(p.Config.Script)
if p.Config.ScriptStop {
numCommands *= 2
}
commands := make([]string, numCommands)
for _, cmd := range p.Config.Script {
if p.Config.ScriptStop {
commands = append(commands, "DRONE_SSH_PREV_COMMAND_EXIT_CODE=$? ; if [ $DRONE_SSH_PREV_COMMAND_EXIT_CODE -ne 0 ]; then exit $DRONE_SSH_PREV_COMMAND_EXIT_CODE; fi;")
}
commands = append(commands, cmd)
}
return commands
}