diff --git a/README.md b/README.md index ae5fa43..4592230 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,10 @@ [Drone](https://github.com/drone/drone) plugin to copy files and artifacts via SSH. +## Feature + +* [x] Support send files to multiple host. + ## Build Build the binary with the following commands: diff --git a/main.go b/main.go index 9b33e57..4fe9339 100644 --- a/main.go +++ b/main.go @@ -9,16 +9,16 @@ import ( ) // Version set at compile-time -var Version string +var Version = "v1.0.0-dev" func main() { app := cli.NewApp() - app.Name = "telegram plugin" - app.Usage = "telegram plugin" + app.Name = "scp plugin" + app.Usage = "scp plugin" app.Action = run app.Version = Version app.Flags = []cli.Flag{ - cli.StringFlag{ + cli.StringSliceFlag{ Name: "host", Usage: "Server host", EnvVar: "PLUGIN_HOST,SCP_HOST", @@ -148,7 +148,7 @@ func run(c *cli.Context) error { Link: c.String("build.link"), }, Config: Config{ - Host: c.String("host"), + Host: c.StringSlice("host"), Port: c.String("port"), Username: c.String("username"), Password: c.String("password"), diff --git a/plugin.go b/plugin.go index 731ee83..2134224 100644 --- a/plugin.go +++ b/plugin.go @@ -34,7 +34,7 @@ type ( // Config for the plugin. Config struct { - Host string + Host []string Port string Username string Password string @@ -103,30 +103,71 @@ func (p Plugin) Exec() error { return err } - // Create MakeConfig instance with remote username, server address and path to private key. - ssh := &easyssh.MakeConfig{ - Server: p.Config.Host, - User: p.Config.Username, - Password: p.Config.Password, - Port: p.Config.Port, - Key: p.Config.Key, - } + for _, host := range p.Config.Host { + // Create MakeConfig instance with remote username, server address and path to private key. + ssh := &easyssh.MakeConfig{ + Server: host, + User: p.Config.Username, + Password: p.Config.Password, + Port: p.Config.Port, + Key: p.Config.Key, + } - // Call Scp method with file you want to upload to remote server. - log.Println("scp file to remote server remote server.") - err = ssh.Scp(tar) + // Call Scp method with file you want to upload to remote server. + log.Println("scp file to remote server remote server.") + err = ssh.Scp(tar) - // Handle errors - if err != nil { - log.Println(err.Error()) - return err - } + // Handle errors + if err != nil { + log.Println(err.Error()) + return err + } - // remove target before upload data - if p.Config.Remove { - log.Println("Remove target folder: " + p.Config.Target) + // remove target before upload data + if p.Config.Remove { + log.Println("Remove target folder: " + p.Config.Target) - response, err := ssh.Run(fmt.Sprintf("rm -rf %s", p.Config.Target)) + response, err := ssh.Run(fmt.Sprintf("rm -rf %s", p.Config.Target)) + + if p.Config.Debug { + log.Println(response) + } + + if err != nil { + log.Println(err.Error()) + return err + } + } + + // mkdir path + log.Println("create remote folder " + p.Config.Target) + response, err := ssh.Run(fmt.Sprintf("mkdir -p %s", p.Config.Target)) + + if p.Config.Debug { + log.Println(response) + } + + if err != nil { + log.Println(err.Error()) + return err + } + + // untar file + log.Println("untar remote file " + dest) + response, err = ssh.Run(fmt.Sprintf("tar -xf %s -C %s", dest, p.Config.Target)) + + if p.Config.Debug { + log.Println(response) + } + + if err != nil { + log.Println(err.Error()) + return err + } + + // remove tar file + log.Println("remove remote file " + dest) + response, err = ssh.Run(fmt.Sprintf("rm -rf %s", dest)) if p.Config.Debug { log.Println(response) @@ -138,44 +179,5 @@ func (p Plugin) Exec() error { } } - // mkdir path - log.Println("create remote folder " + p.Config.Target) - response, err := ssh.Run(fmt.Sprintf("mkdir -p %s", p.Config.Target)) - - if p.Config.Debug { - log.Println(response) - } - - if err != nil { - log.Println(err.Error()) - return err - } - - // untar file - log.Println("untar remote file " + dest) - response, err = ssh.Run(fmt.Sprintf("tar -xf %s -C %s", dest, p.Config.Target)) - - if p.Config.Debug { - log.Println(response) - } - - if err != nil { - log.Println(err.Error()) - return err - } - - // remove tar file - log.Println("remove remote file " + dest) - response, err = ssh.Run(fmt.Sprintf("rm -rf %s", dest)) - - if p.Config.Debug { - log.Println(response) - } - - if err != nil { - log.Println(err.Error()) - return err - } - return nil }