Groovy multiline shell script in Jenkins sh step does not return stdout












1















I am trying to save the output of a groovy shell script in a variable.



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()


But there is no output and I wonder why it does not capture the output?



If I do this:



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)"
"""


I see the output in the console. However, it doesn't get captured either. Is there any other way of capturing the output of multiline sh script?










share|improve this question





























    1















    I am trying to save the output of a groovy shell script in a variable.



    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()


    But there is no output and I wonder why it does not capture the output?



    If I do this:



    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)"
    """


    I see the output in the console. However, it doesn't get captured either. Is there any other way of capturing the output of multiline sh script?










    share|improve this question



























      1












      1








      1








      I am trying to save the output of a groovy shell script in a variable.



      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()


      But there is no output and I wonder why it does not capture the output?



      If I do this:



      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)"
      """


      I see the output in the console. However, it doesn't get captured either. Is there any other way of capturing the output of multiline sh script?










      share|improve this question
















      I am trying to save the output of a groovy shell script in a variable.



      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()


      But there is no output and I wonder why it does not capture the output?



      If I do this:



      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)"
      """


      I see the output in the console. However, it doesn't get captured either. Is there any other way of capturing the output of multiline sh script?







      jenkins groovy






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 20 '18 at 8:57









      Szymon Stepniak

      17.5k83364




      17.5k83364










      asked Nov 20 '18 at 6:40









      FrostFrost

      406




      406
























          1 Answer
          1






          active

          oldest

          votes


















          2














          The ${} syntax is not working that way. It can only be used add content to a string.



          The returnStdout option can also be used with triple quoted scripts. So you probably want to do the following:



          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)" """





          share|improve this answer
























          • Thank you, that worked. The only thing i had to add, to get the key, was a ".tokenize().last()" otherwise i get the whole output and not only the ID. Thank you :-)

            – Frost
            Nov 20 '18 at 9:28











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53387555%2fgroovy-multiline-shell-script-in-jenkins-sh-step-does-not-return-stdout%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          2














          The ${} syntax is not working that way. It can only be used add content to a string.



          The returnStdout option can also be used with triple quoted scripts. So you probably want to do the following:



          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)" """





          share|improve this answer
























          • Thank you, that worked. The only thing i had to add, to get the key, was a ".tokenize().last()" otherwise i get the whole output and not only the ID. Thank you :-)

            – Frost
            Nov 20 '18 at 9:28
















          2














          The ${} syntax is not working that way. It can only be used add content to a string.



          The returnStdout option can also be used with triple quoted scripts. So you probably want to do the following:



          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)" """





          share|improve this answer
























          • Thank you, that worked. The only thing i had to add, to get the key, was a ".tokenize().last()" otherwise i get the whole output and not only the ID. Thank you :-)

            – Frost
            Nov 20 '18 at 9:28














          2












          2








          2







          The ${} syntax is not working that way. It can only be used add content to a string.



          The returnStdout option can also be used with triple quoted scripts. So you probably want to do the following:



          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)" """





          share|improve this answer













          The ${} syntax is not working that way. It can only be used add content to a string.



          The returnStdout option can also be used with triple quoted scripts. So you probably want to do the following:



          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)" """






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 20 '18 at 8:13









          MichaelMichael

          1,2161912




          1,2161912













          • Thank you, that worked. The only thing i had to add, to get the key, was a ".tokenize().last()" otherwise i get the whole output and not only the ID. Thank you :-)

            – Frost
            Nov 20 '18 at 9:28



















          • Thank you, that worked. The only thing i had to add, to get the key, was a ".tokenize().last()" otherwise i get the whole output and not only the ID. Thank you :-)

            – Frost
            Nov 20 '18 at 9:28

















          Thank you, that worked. The only thing i had to add, to get the key, was a ".tokenize().last()" otherwise i get the whole output and not only the ID. Thank you :-)

          – Frost
          Nov 20 '18 at 9:28





          Thank you, that worked. The only thing i had to add, to get the key, was a ".tokenize().last()" otherwise i get the whole output and not only the ID. Thank you :-)

          – Frost
          Nov 20 '18 at 9:28




















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53387555%2fgroovy-multiline-shell-script-in-jenkins-sh-step-does-not-return-stdout%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Biblatex bibliography style without URLs when DOI exists (in Overleaf with Zotero bibliography)

          ComboBox Display Member on multiple fields

          Is it possible to collect Nectar points via Trainline?