diff --git a/DOCS.md b/DOCS.md index 6efe438..95f652d 100644 --- a/DOCS.md +++ b/DOCS.md @@ -28,6 +28,7 @@ deploy: - bar.com user: root port: 22 + sleep: 5 commands: - echo hello - echo world @@ -35,6 +36,8 @@ deploy: In the above example Drone executes the commands on multiple hosts sequentially. If the commands fail on a single host this plugin exits immediatly, and will not run your commands on the remaining hosts in the list. +The above example also uses the `sleep` parameter. The sleep parameter instructs Drone to sleep for N seconds between host executions. + ## Keys The plugin authenticates to your server using a per-repository SSH key generated by Drone. You can find the public key in your repository settings in Drone. You will need to copy / paste this key into your `~/.ssh/authorized_keys` file on your remote machine. \ No newline at end of file diff --git a/main.go b/main.go index ff0d4fb..b35e65f 100644 --- a/main.go +++ b/main.go @@ -6,6 +6,7 @@ import ( "os" "strconv" "strings" + "time" "github.com/drone/drone-plugin-go/plugin" "golang.org/x/crypto/ssh" @@ -18,6 +19,7 @@ type Params struct { Login string `json:"user"` Port int `json:"port"` Host StrSlice `json:"host"` + Sleep int `json:"sleep"` } func main() { @@ -27,11 +29,15 @@ func main() { plugin.Param("vargs", &v) plugin.MustParse() - for _, host := range v.Host.Slice() { + for i, host := range v.Host.Slice() { err := run(w.Keys, v, host) if err != nil { os.Exit(1) } + if v.Sleep != 0 && i > v.Host.Len()-1 { + fmt.Printf("$ sleep %d\n", v.Sleep) + time.Sleep(time.Duration(v.Sleep) * time.Second) + } } }