diff --git a/plugin.go b/plugin.go index d48db66..211d6c5 100644 --- a/plugin.go +++ b/plugin.go @@ -2,6 +2,7 @@ package main import ( "fmt" + "os" "strconv" "strings" "sync" @@ -86,6 +87,17 @@ func (p Plugin) Exec() error { }, } + // expand DRONE env variables in script (like DRONE_DEPLOY_TO) + for index := range p.Config.Script { + parts := strings.Split(p.Config.Script[index], " ") + for i := range parts { + if strings.Contains(parts[i], "DRONE") { + parts[i] = os.ExpandEnv(parts[i]) + } + } + p.Config.Script[index] = strings.Join(parts, " ") + } + 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..3d3653d 100644 --- a/plugin_test.go +++ b/plugin_test.go @@ -1,6 +1,7 @@ package main import ( + "os" "testing" "github.com/appleboy/easyssh-proxy" @@ -137,6 +138,23 @@ func TestStreamFromSSHCommand(t *testing.T) { assert.Nil(t, err) } +func TestDroneEnvSubstitution(t *testing.T) { + os.Setenv("DRONE_DEPLOY_TO", "dev") + plugin := Plugin{ + Config: Config{ + Host: []string{"localhost", "127.0.0.1"}, + UserName: "drone-scp", + Port: 22, + KeyPath: "./tests/.ssh/id_rsa", + Script: []string{"echo $DRONE_DEPLOY_TO $PATH"}, + CommandTimeout: 60, + }, + } + + err := plugin.Exec() + assert.Nil(t, err) +} + func TestSSHScriptWithError(t *testing.T) { plugin := Plugin{ Config: Config{