Jenkins中sh步骤中的Groovy多行shell脚本无法返回stdout

6
我正在尝试将Groovy Shell脚本的输出保存在变量中。
test = sh(returnStdout: true, script: "#!/bin/bash -l && export VAULT_ADDR=http://ourVault.de:8100 && export VAULT_SKIP_VERIFY=true && vault auth ${VAULT_TOKEN} && vault read -field=value test/${RELEASE2}/ID").trim()

但是没有输出,我想知道为什么它不能捕获输出?

如果我这样做:

def test = ""
sh"""#!/bin/bash -l
     export VAULT_ADDR=http://ourVault.de:8100
     export VAULT_SKIP_VERIFY=true
     vault auth ${VAULT_TOKEN}
     ${test}=\"\$(vault read -field=value emea/test/hockey/ios/${RELEASE2}/appID)\"
  """

我在控制台中看到输出内容,但是它也没有被捕获。是否有其他方法来捕获多行sh脚本的输出?

1个回答

13

${}语法不能以那种方式工作。它只能用于向字符串添加内容。

returnStdout选项也可以与三引号脚本一起使用。因此,您可能想要执行以下操作:

def test = sh returnStdout:true, script: """
    #!/bin/bash -l
    export VAULT_ADDR=http://ourVault.de:8100 
    export VAULT_SKIP_VERIFY=true
    vault auth ${VAULT_TOKEN}
    echo "\$(vault read -field=value emea/test/hockey/ios/${RELEASE2}/appID)" """

2
谢谢,这个方法可行。我只需要添加一个“.tokenize().last()”来获取密钥,否则我会得到整个输出而不是仅仅ID。谢谢 :-) - Frost

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接