diff --git a/main.go b/main.go index 4e0511d..e68a83b 100644 --- a/main.go +++ b/main.go @@ -115,6 +115,16 @@ func main() { Usage: "proxy connection timeout", EnvVar: "PLUGIN_PROXY_TIMEOUT,PROXY_SSH_TIMEOUT", }, + cli.StringSliceFlag{ + Name: "secrets", + Usage: "plugin secret", + EnvVar: "PLUGIN_SECRETS", + }, + cli.StringSliceFlag{ + Name: "envs", + Usage: "Pass envs", + EnvVar: "PLUGIN_ENVS", + }, } // Override a template @@ -169,6 +179,8 @@ func run(c *cli.Context) error { Timeout: c.Duration("timeout"), CommandTimeout: c.Int("command.timeout"), Script: c.StringSlice("script"), + Secrets: c.StringSlice("secrets"), + Envs: c.StringSlice("envs"), Proxy: easyssh.DefaultConfig{ Key: c.String("proxy.ssh-key"), KeyPath: c.String("proxy.key-path"), diff --git a/plugin.go b/plugin.go index d48db66..d3570e3 100644 --- a/plugin.go +++ b/plugin.go @@ -2,6 +2,7 @@ package main import ( "fmt" + "os" "strconv" "strings" "sync" @@ -29,6 +30,8 @@ type ( Timeout time.Duration CommandTimeout int Script []string + Secrets []string + Envs []string Proxy easyssh.DefaultConfig } @@ -86,6 +89,15 @@ func (p Plugin) Exec() error { }, } + env := []string{} + for _, key := range p.Config.Envs { + val := os.Getenv(key) + val = strings.Replace(val, " ", "", -1) + env = append(env, key+"="+val) + } + + p.Config.Script = append(env, p.Config.Script...) + p.log(host, "commands: ", strings.Join(p.Config.Script, "\n")) stdoutChan, stderrChan, doneChan, errChan, err := ssh.Stream(strings.Join(p.Config.Script, "\n"), p.Config.CommandTimeout) if err != nil { diff --git a/plugin_test.go b/plugin_test.go index 8fe9709..9466bef 100644 --- a/plugin_test.go +++ b/plugin_test.go @@ -1,6 +1,7 @@ package main import ( + "os" "testing" "github.com/appleboy/easyssh-proxy" @@ -229,3 +230,28 @@ func TestSSHCommandExitCodeError(t *testing.T) { err := plugin.Exec() assert.NotNil(t, err) } + +func TestSetENV(t *testing.T) { + os.Setenv("FOO", "1") + plugin := Plugin{ + Config: Config{ + Host: []string{"localhost"}, + UserName: "drone-scp", + Port: 22, + KeyPath: "./tests/.ssh/id_rsa", + Secrets: []string{"FOO"}, + Envs: []string{"FOO"}, + Script: []string{"whoami; echo $FOO"}, + CommandTimeout: 1, + Proxy: easyssh.DefaultConfig{ + Server: "localhost", + User: "drone-scp", + Port: "22", + KeyPath: "./tests/.ssh/id_rsa", + }, + }, + } + + err := plugin.Exec() + assert.Nil(t, err) +}