withContext() in Jenkins pipeline script is hiding console output
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
add a comment |
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
add a comment |
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
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
jenkins
asked Nov 12 '18 at 13:05
Mike HoganMike Hogan
3,90352142
3,90352142
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
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.
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
add a comment |
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.
add a comment |
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.
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.
answered Nov 13 '18 at 15:22
Mike HoganMike Hogan
3,90352142
3,90352142
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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