withContext() in Jenkins pipeline script is hiding console output












0















I have this jenkins pipeline script (you should be able to just paste it directly into a blank pipeline build)



import hudson.console.LineTransformationOutputStream
import hudson.console.ConsoleLogFilter
import java.nio.charset.Charset
import java.nio.charset.StandardCharsets

class MyConsoleLogFilter extends ConsoleLogFilter {

OutputStream decorateLogger(AbstractBuild build, OutputStream logger)
throws IOException, InterruptedException {
return new MyOutputStream(logger, StandardCharsets.UTF_8)
}
}

class MyOutputStream extends LineTransformationOutputStream {
def logger
def charset

MyOutputStream(OutputStream logger, Charset charset) {
this.logger = logger
this.charset = charset
}

void close() throws IOException {
super.close();
logger.close();
}

void eol(byte bytes, int len) throws IOException {
String line = charset.decode(ByteBuffer.wrap(bytes, 0, len)).toString();
logger.write("xxx ".getBytes(charset))
logger.write(line.getBytes(charset));
}
}

node {
withContext(new MyConsoleLogFilter()) {
echo 'Hello World'
}
echo 'Hello World'
}


I expect to see the first Hello World prefixed by xxx, because of the wrapping by MyConsoleLogFilter.



But all I see is greyed out console output as follows:



Started by user Admin
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] node
Running on Jenkins in /var/jenkins_home/workspace/mike-learning
[Pipeline] {
[Pipeline] withContext
[Pipeline] {
[Pipeline] echo
[Pipeline] }
[Pipeline] // withContext
[Pipeline] echo
Hello World
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS


Why is the console output from within the withContext() block being hidden?










share|improve this question



























    0















    I have this jenkins pipeline script (you should be able to just paste it directly into a blank pipeline build)



    import hudson.console.LineTransformationOutputStream
    import hudson.console.ConsoleLogFilter
    import java.nio.charset.Charset
    import java.nio.charset.StandardCharsets

    class MyConsoleLogFilter extends ConsoleLogFilter {

    OutputStream decorateLogger(AbstractBuild build, OutputStream logger)
    throws IOException, InterruptedException {
    return new MyOutputStream(logger, StandardCharsets.UTF_8)
    }
    }

    class MyOutputStream extends LineTransformationOutputStream {
    def logger
    def charset

    MyOutputStream(OutputStream logger, Charset charset) {
    this.logger = logger
    this.charset = charset
    }

    void close() throws IOException {
    super.close();
    logger.close();
    }

    void eol(byte bytes, int len) throws IOException {
    String line = charset.decode(ByteBuffer.wrap(bytes, 0, len)).toString();
    logger.write("xxx ".getBytes(charset))
    logger.write(line.getBytes(charset));
    }
    }

    node {
    withContext(new MyConsoleLogFilter()) {
    echo 'Hello World'
    }
    echo 'Hello World'
    }


    I expect to see the first Hello World prefixed by xxx, because of the wrapping by MyConsoleLogFilter.



    But all I see is greyed out console output as follows:



    Started by user Admin
    Running in Durability level: MAX_SURVIVABILITY
    [Pipeline] node
    Running on Jenkins in /var/jenkins_home/workspace/mike-learning
    [Pipeline] {
    [Pipeline] withContext
    [Pipeline] {
    [Pipeline] echo
    [Pipeline] }
    [Pipeline] // withContext
    [Pipeline] echo
    Hello World
    [Pipeline] }
    [Pipeline] // node
    [Pipeline] End of Pipeline
    Finished: SUCCESS


    Why is the console output from within the withContext() block being hidden?










    share|improve this question

























      0












      0








      0








      I have this jenkins pipeline script (you should be able to just paste it directly into a blank pipeline build)



      import hudson.console.LineTransformationOutputStream
      import hudson.console.ConsoleLogFilter
      import java.nio.charset.Charset
      import java.nio.charset.StandardCharsets

      class MyConsoleLogFilter extends ConsoleLogFilter {

      OutputStream decorateLogger(AbstractBuild build, OutputStream logger)
      throws IOException, InterruptedException {
      return new MyOutputStream(logger, StandardCharsets.UTF_8)
      }
      }

      class MyOutputStream extends LineTransformationOutputStream {
      def logger
      def charset

      MyOutputStream(OutputStream logger, Charset charset) {
      this.logger = logger
      this.charset = charset
      }

      void close() throws IOException {
      super.close();
      logger.close();
      }

      void eol(byte bytes, int len) throws IOException {
      String line = charset.decode(ByteBuffer.wrap(bytes, 0, len)).toString();
      logger.write("xxx ".getBytes(charset))
      logger.write(line.getBytes(charset));
      }
      }

      node {
      withContext(new MyConsoleLogFilter()) {
      echo 'Hello World'
      }
      echo 'Hello World'
      }


      I expect to see the first Hello World prefixed by xxx, because of the wrapping by MyConsoleLogFilter.



      But all I see is greyed out console output as follows:



      Started by user Admin
      Running in Durability level: MAX_SURVIVABILITY
      [Pipeline] node
      Running on Jenkins in /var/jenkins_home/workspace/mike-learning
      [Pipeline] {
      [Pipeline] withContext
      [Pipeline] {
      [Pipeline] echo
      [Pipeline] }
      [Pipeline] // withContext
      [Pipeline] echo
      Hello World
      [Pipeline] }
      [Pipeline] // node
      [Pipeline] End of Pipeline
      Finished: SUCCESS


      Why is the console output from within the withContext() block being hidden?










      share|improve this question














      I have this jenkins pipeline script (you should be able to just paste it directly into a blank pipeline build)



      import hudson.console.LineTransformationOutputStream
      import hudson.console.ConsoleLogFilter
      import java.nio.charset.Charset
      import java.nio.charset.StandardCharsets

      class MyConsoleLogFilter extends ConsoleLogFilter {

      OutputStream decorateLogger(AbstractBuild build, OutputStream logger)
      throws IOException, InterruptedException {
      return new MyOutputStream(logger, StandardCharsets.UTF_8)
      }
      }

      class MyOutputStream extends LineTransformationOutputStream {
      def logger
      def charset

      MyOutputStream(OutputStream logger, Charset charset) {
      this.logger = logger
      this.charset = charset
      }

      void close() throws IOException {
      super.close();
      logger.close();
      }

      void eol(byte bytes, int len) throws IOException {
      String line = charset.decode(ByteBuffer.wrap(bytes, 0, len)).toString();
      logger.write("xxx ".getBytes(charset))
      logger.write(line.getBytes(charset));
      }
      }

      node {
      withContext(new MyConsoleLogFilter()) {
      echo 'Hello World'
      }
      echo 'Hello World'
      }


      I expect to see the first Hello World prefixed by xxx, because of the wrapping by MyConsoleLogFilter.



      But all I see is greyed out console output as follows:



      Started by user Admin
      Running in Durability level: MAX_SURVIVABILITY
      [Pipeline] node
      Running on Jenkins in /var/jenkins_home/workspace/mike-learning
      [Pipeline] {
      [Pipeline] withContext
      [Pipeline] {
      [Pipeline] echo
      [Pipeline] }
      [Pipeline] // withContext
      [Pipeline] echo
      Hello World
      [Pipeline] }
      [Pipeline] // node
      [Pipeline] End of Pipeline
      Finished: SUCCESS


      Why is the console output from within the withContext() block being hidden?







      jenkins






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 12 '18 at 13:05









      Mike HoganMike Hogan

      3,90352142




      3,90352142
























          1 Answer
          1






          active

          oldest

          votes


















          0














          A colleague (Hibri Marzook) solved this for me. He pointed me towards https://issues.jenkins-ci.org/browse/JENKINS-53151 , which prompted me to do this:



          import hudson.console.LineTransformationOutputStream
          import hudson.console.ConsoleLogFilter
          import java.nio.charset.Charset
          import java.nio.charset.StandardCharsets

          class MyConsoleLogFilter extends ConsoleLogFilter {
          @NonCPS
          OutputStream decorateLogger(AbstractBuild build, OutputStream logger)
          throws IOException, InterruptedException {
          return new MyOutputStream(logger, StandardCharsets.UTF_8)
          }
          }

          class MyOutputStream extends LineTransformationOutputStream {
          def logger
          def charset

          MyOutputStream(OutputStream logger, Charset charset) {
          this.logger = logger
          this.charset = charset
          }

          @NonCPS
          void close() throws IOException {
          super.close();
          logger.close();
          }

          @NonCPS
          void eol(byte bytes, int len) throws IOException {
          def line = charset.decode(java.nio.ByteBuffer.wrap(bytes, 0, len)).toString();
          logger.write("xxx ".getBytes(charset))
          logger.write(line.getBytes(charset));
          }
          }

          node {
          withContext(new MyConsoleLogFilter()) {
          echo 'Hello World'
          }
          echo 'Hello World'
          }


          and now it works.






          share|improve this answer























            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%2f53262813%2fwithcontext-in-jenkins-pipeline-script-is-hiding-console-output%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









            0














            A colleague (Hibri Marzook) solved this for me. He pointed me towards https://issues.jenkins-ci.org/browse/JENKINS-53151 , which prompted me to do this:



            import hudson.console.LineTransformationOutputStream
            import hudson.console.ConsoleLogFilter
            import java.nio.charset.Charset
            import java.nio.charset.StandardCharsets

            class MyConsoleLogFilter extends ConsoleLogFilter {
            @NonCPS
            OutputStream decorateLogger(AbstractBuild build, OutputStream logger)
            throws IOException, InterruptedException {
            return new MyOutputStream(logger, StandardCharsets.UTF_8)
            }
            }

            class MyOutputStream extends LineTransformationOutputStream {
            def logger
            def charset

            MyOutputStream(OutputStream logger, Charset charset) {
            this.logger = logger
            this.charset = charset
            }

            @NonCPS
            void close() throws IOException {
            super.close();
            logger.close();
            }

            @NonCPS
            void eol(byte bytes, int len) throws IOException {
            def line = charset.decode(java.nio.ByteBuffer.wrap(bytes, 0, len)).toString();
            logger.write("xxx ".getBytes(charset))
            logger.write(line.getBytes(charset));
            }
            }

            node {
            withContext(new MyConsoleLogFilter()) {
            echo 'Hello World'
            }
            echo 'Hello World'
            }


            and now it works.






            share|improve this answer




























              0














              A colleague (Hibri Marzook) solved this for me. He pointed me towards https://issues.jenkins-ci.org/browse/JENKINS-53151 , which prompted me to do this:



              import hudson.console.LineTransformationOutputStream
              import hudson.console.ConsoleLogFilter
              import java.nio.charset.Charset
              import java.nio.charset.StandardCharsets

              class MyConsoleLogFilter extends ConsoleLogFilter {
              @NonCPS
              OutputStream decorateLogger(AbstractBuild build, OutputStream logger)
              throws IOException, InterruptedException {
              return new MyOutputStream(logger, StandardCharsets.UTF_8)
              }
              }

              class MyOutputStream extends LineTransformationOutputStream {
              def logger
              def charset

              MyOutputStream(OutputStream logger, Charset charset) {
              this.logger = logger
              this.charset = charset
              }

              @NonCPS
              void close() throws IOException {
              super.close();
              logger.close();
              }

              @NonCPS
              void eol(byte bytes, int len) throws IOException {
              def line = charset.decode(java.nio.ByteBuffer.wrap(bytes, 0, len)).toString();
              logger.write("xxx ".getBytes(charset))
              logger.write(line.getBytes(charset));
              }
              }

              node {
              withContext(new MyConsoleLogFilter()) {
              echo 'Hello World'
              }
              echo 'Hello World'
              }


              and now it works.






              share|improve this answer


























                0












                0








                0







                A colleague (Hibri Marzook) solved this for me. He pointed me towards https://issues.jenkins-ci.org/browse/JENKINS-53151 , which prompted me to do this:



                import hudson.console.LineTransformationOutputStream
                import hudson.console.ConsoleLogFilter
                import java.nio.charset.Charset
                import java.nio.charset.StandardCharsets

                class MyConsoleLogFilter extends ConsoleLogFilter {
                @NonCPS
                OutputStream decorateLogger(AbstractBuild build, OutputStream logger)
                throws IOException, InterruptedException {
                return new MyOutputStream(logger, StandardCharsets.UTF_8)
                }
                }

                class MyOutputStream extends LineTransformationOutputStream {
                def logger
                def charset

                MyOutputStream(OutputStream logger, Charset charset) {
                this.logger = logger
                this.charset = charset
                }

                @NonCPS
                void close() throws IOException {
                super.close();
                logger.close();
                }

                @NonCPS
                void eol(byte bytes, int len) throws IOException {
                def line = charset.decode(java.nio.ByteBuffer.wrap(bytes, 0, len)).toString();
                logger.write("xxx ".getBytes(charset))
                logger.write(line.getBytes(charset));
                }
                }

                node {
                withContext(new MyConsoleLogFilter()) {
                echo 'Hello World'
                }
                echo 'Hello World'
                }


                and now it works.






                share|improve this answer













                A colleague (Hibri Marzook) solved this for me. He pointed me towards https://issues.jenkins-ci.org/browse/JENKINS-53151 , which prompted me to do this:



                import hudson.console.LineTransformationOutputStream
                import hudson.console.ConsoleLogFilter
                import java.nio.charset.Charset
                import java.nio.charset.StandardCharsets

                class MyConsoleLogFilter extends ConsoleLogFilter {
                @NonCPS
                OutputStream decorateLogger(AbstractBuild build, OutputStream logger)
                throws IOException, InterruptedException {
                return new MyOutputStream(logger, StandardCharsets.UTF_8)
                }
                }

                class MyOutputStream extends LineTransformationOutputStream {
                def logger
                def charset

                MyOutputStream(OutputStream logger, Charset charset) {
                this.logger = logger
                this.charset = charset
                }

                @NonCPS
                void close() throws IOException {
                super.close();
                logger.close();
                }

                @NonCPS
                void eol(byte bytes, int len) throws IOException {
                def line = charset.decode(java.nio.ByteBuffer.wrap(bytes, 0, len)).toString();
                logger.write("xxx ".getBytes(charset))
                logger.write(line.getBytes(charset));
                }
                }

                node {
                withContext(new MyConsoleLogFilter()) {
                echo 'Hello World'
                }
                echo 'Hello World'
                }


                and now it works.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 13 '18 at 15:22









                Mike HoganMike Hogan

                3,90352142




                3,90352142






























                    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%2f53262813%2fwithcontext-in-jenkins-pipeline-script-is-hiding-console-output%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

                    Xamarin.iOS Cant Deploy on Iphone

                    Glorious Revolution

                    Dulmage-Mendelsohn matrix decomposition in Python