diff --git a/plugin.go b/plugin.go index 6ea65d8..947aafd 100644 --- a/plugin.go +++ b/plugin.go @@ -75,8 +75,9 @@ func (p Plugin) exec(host string, wg *sync.WaitGroup, errChannel chan error) { env := []string{} for _, key := range p.Config.Envs { key = strings.ToUpper(key) - val := os.Getenv(key) - env = append(env, key+"="+escapeArg(val)) + if val, found := os.LookupEnv(key); found { + env = append(env, key+"="+escapeArg(val)) + } } p.Config.Script = append(env, p.Config.Script...) diff --git a/plugin_test.go b/plugin_test.go index 175ecae..d58dc4c 100644 --- a/plugin_test.go +++ b/plugin_test.go @@ -257,6 +257,33 @@ func TestSetENV(t *testing.T) { assert.Nil(t, err) } +func TestSetExistingENV(t *testing.T) { + os.Setenv("FOO", "Value for foo") + os.Setenv("BAR", "") + plugin := Plugin{ + Config: Config{ + Host: []string{"localhost"}, + UserName: "drone-scp", + Port: 22, + KeyPath: "./tests/.ssh/id_rsa", + Secrets: []string{"FOO"}, + Envs: []string{"foo", "bar", "baz"}, + Debug: true, + Script: []string{"export FOO", "export BAR", "export BAZ", "env | grep -q '^FOO=Value for foo$'", "env | grep -q '^BAR=$'", "if env | grep -q BAZ; then false; else true; fi"}, + CommandTimeout: 1, + Proxy: easyssh.DefaultConfig{ + Server: "localhost", + User: "drone-scp", + Port: "22", + KeyPath: "./tests/.ssh/id_rsa", + }, + }, + } + + err := plugin.Exec() + assert.Nil(t, err) +} + func TestSyncMode(t *testing.T) { plugin := Plugin{ Config: Config{