[JIRA] (JENKINS-58425) withMaven prints debug log and pollutes

0 views
Skip to first unread message

antoine.tran.11w@gmail.com (JIRA)

unread,
Jul 10, 2019, 8:47:02 AM7/10/19
to jenkinsc...@googlegroups.com
Antoine Tran created an issue
 
Jenkins / Improvement JENKINS-58425
withMaven prints debug log and pollutes
Issue Type: Improvement Improvement
Assignee: Alvaro Lobato
Components: pipeline-maven-plugin
Created: 2019-07-10 12:46
Environment: Jenkins 2.60.3
Pipeline Maven Integration 2.0.1
mvn 3.5.3
Priority: Minor Minor
Reporter: Antoine Tran

Expected behavior:

In pipeline:

withMaven(
maven: mvnId, // Maven installation declared in the Jenkins "Global Tool Configuration"
mavenSettingsConfig: mvnSettingsId, // Maven settings.xml file defined with the Jenkins Config File Provider Plugin
mavenLocalRepo: mavenLocalRepo
)

{ result = sh( returnStdout: true, script: 'mvn org.apache.maven.plugins:maven-help-plugin::evaluate -Dexpression=project.version -q -DforceStdout -B" ) }

result variable value is "1.5.0"

Actual behavior:

result variable is:

"----- withMaven Wrapper script -----
Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-24T19:49:05Z)
Maven home: /var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/mvn-3.5.3
Java version: 1.8.0_161, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.17.1.el7.x86_64", arch: "amd64", family: "unix"
1.5.0"

Analysis:

withMaven wrapper adds stdout info, that cannot be removed, disabled, according to source:

https://github.com/jenkinsci/pipeline-maven-plugin/blob/b150161c91769de782af6c5b2ebe7907a4bd17b0/jenkins-plugin/src/main/java/org/jenkinsci/plugins/pipeline/maven/WithMavenStepExecution2.java

However, that breaks the way we gets output with mvn command.

Workaround: specifically to maven-help-plugin, I can redirect output to a file, and readFile that.

Long-term solution (exclusive choice):

1/ add a silent field to withMaven, to disable any output?

2/ add a showDebug field to show debug info

3/ do not show debug info, except when mvn command fails

Thank you.

Add Comment Add Comment
 
This message was sent by Atlassian Jira (v7.11.2#711002-sha1:fdc329d)

antoine.tran.11w@gmail.com (JIRA)

unread,
Jul 10, 2019, 8:48:02 AM7/10/19
to jenkinsc...@googlegroups.com
Antoine Tran updated an issue
Change By: Antoine Tran
Expected behavior:

In pipeline:

 
{code:java}
withMaven(
maven: mvnId, // Maven installation declared in the Jenkins "Global Tool Configuration"
mavenSettingsConfig: mvnSettingsId, // Maven settings.xml file defined with the Jenkins Config File Provider Plugin
mavenLocalRepo: mavenLocalRepo
)
{
{ result = sh(
returnStdout: true,
script: 'mvn org.apache.maven.plugins:maven-help-plugin::evaluate -Dexpression=project.version -q -DforceStdout -B"
) }
{code }
 

result variable value is "
{noformat}
1.5.0 {noformat}
"

Actual behavior:

result variable is:

"

{noformat}
----- withMaven Wrapper script -----
Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-24T19:49:05Z)
Maven home: /var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/mvn-3.5.3
Java version: 1.8.0_161, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.17.1.el7.x86_64", arch: "amd64", family: "unix"
1.5.0 {noformat}
"

Analysis:

withMaven wrapper adds stdout info, that cannot be removed, disabled, according to source:

[ https://github.com/jenkinsci/pipeline-maven-plugin/blob/b150161c91769de782af6c5b2ebe7907a4bd17b0/jenkins-plugin/src/main/java/org/jenkinsci/plugins/pipeline/maven/WithMavenStepExecution2.java ]

However, that breaks the way we gets output with mvn command.

Workaround: specifically to maven-help-plugin, I can redirect output to a file, and readFile that.

Long-term solution (exclusive choice):

1/
# add a silent field to withMaven, to disable any output?

2/
# add a showDebug field to show debug info

3/
# do not show debug info, except when mvn command fails

Thank you.

f.modler@gmx.net (JIRA)

unread,
Aug 13, 2019, 4:54:02 PM8/13/19
to jenkinsc...@googlegroups.com
Falko Modler commented on Improvement JENKINS-58425
 
Re: withMaven prints debug log and pollutes

Same here. I had to add {{ | tail -1}} to my mvn help:evaluate execution.

f.modler@gmx.net (JIRA)

unread,
Aug 13, 2019, 4:54:03 PM8/13/19
to jenkinsc...@googlegroups.com
Falko Modler edited a comment on Improvement JENKINS-58425

f.modler@gmx.net (JIRA)

unread,
Aug 13, 2019, 4:54:04 PM8/13/19
to jenkinsc...@googlegroups.com

cleclerc@cloudbees.com (JIRA)

unread,
Aug 16, 2019, 6:00:05 AM8/16/19
to jenkinsc...@googlegroups.com
Cyrille Le Clerc updated an issue
 
Change By: Cyrille Le Clerc
Expected behavior:

In pipeline:

 
{code:java}
withMaven(
maven: mvnId, // Maven installation declared in the Jenkins "Global Tool Configuration"
mavenSettingsConfig: mvnSettingsId, // Maven settings.xml file defined with the Jenkins Config File Provider Plugin
mavenLocalRepo: mavenLocalRepo
)
{

result = sh(
returnStdout: true,
script: 'mvn org.apache.maven.plugins:maven-help-plugin::evaluate -Dexpression=project.version -q -DforceStdout -B" )
}
{code}
 

Desired result variable value is " :
{noformat}
1.5.0{noformat}
"  

Actual
behavior:

result variable is :

"
{noformat}
----- withMaven Wrapper script -----
Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-24T19:49:05Z)
Maven home: /var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/mvn-3.5.3
Java version: 1.8.0_161, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.17.1.el7.x86_64", arch: "amd64", family: "unix"
1.5.0{noformat}
"

Analysis:

withMaven wrapper adds stdout info, that cannot be removed, disabled, according to source:

[https://github.com/jenkinsci/pipeline-maven-plugin/blob/b150161c91769de782af6c5b2ebe7907a4bd17b0/jenkins-plugin/src/main/java/org/jenkinsci/plugins/pipeline/maven/WithMavenStepExecution2.java]

However, that breaks the way we gets output with mvn command.

Workaround: specifically to maven-help-plugin, I can redirect output to a file, and readFile that.

Long-term solution (exclusive choice):
# add a silent field to withMaven, to disable any output?
# add a showDebug field to show debug info
# do not show debug info, except when mvn command fails

Thank you.

cleclerc@cloudbees.com (JIRA)

unread,
Aug 16, 2019, 6:08:02 AM8/16/19
to jenkinsc...@googlegroups.com
Cyrille Le Clerc commented on Improvement JENKINS-58425
 
Re: withMaven prints debug log and pollutes

Very valid point. We initially focused on traceability & troubleshootability and we missed this very relevant use case.

We are doing 2 things that cause problems for your use case:

  • Troubleshootability: we make visible that the `mvn` call goes through the "wrapper script" that we create to inject Maven parameters (settings files...) outputting the message "withMaven Wrapper script" (here)
  • Traceability: we always add the `mvn` CLI argument `--show-version` (here)

Both should become 'optional', maybe we can even remove the troubleshootability message as the feature is mature and we have not heard of problems caused by this wrapper script.

josh@grahamis.com (JIRA)

unread,
Jan 12, 2020, 7:42:02 PM1/12/20
to jenkinsc...@googlegroups.com

A solution more keeping with *ix command line tooling is that this sort of additional log / debug information go to stderr, not stdout.

This message was sent by Atlassian Jira (v7.13.6#713006-sha1:cc4451f)
Atlassian logo

pollentierk@yahoo.com (JIRA)

unread,
Jan 28, 2020, 8:13:03 AM1/28/20
to jenkinsc...@googlegroups.com
K P commented on Improvement JENKINS-58425

This indeed breaks the possibility to make easy use of the maven-help-plugin to get e.g. a pom version, pom artifact, etc. when used inside a withMaven() block.
... which is actually the method suggested here https://jenkins.io/doc/pipeline/steps/pipeline-utility-steps/#readmavenpom-read-a-maven-project-file , instead of readMavenPom. (except they don't explicitly suggest to put it inside a withMaven())

In my case, I got around this by further manipulating the variable with some Groovy code to extract the relevant part of the output. ( result.substring(result.lastIndexOf("\n") – after verifying it actually contains a newline "\n", to avoid this breaking if ever the behaviour of withMaven and its output would change again). Adding a "| tail -1" was not an option in my case, as it was running on Windows.

Note: even if this behaviour of withMaven() wouldn't be changed, it may be a good idea to inform the maintainers of the Pipeline Utility Steps so this could be indicated in their doc, as I suppose more users may struggle with this when merely following that doc?

garrett.j.smith@leidos.com (JIRA)

unread,
Feb 20, 2020, 10:22:02 AM2/20/20
to jenkinsc...@googlegroups.com

Is there a way around this? I'm even trying to log to a temporary file and I'm still seeing the stdout info.

garrett.j.smith@leidos.com (JIRA)

unread,
Feb 20, 2020, 10:24:02 AM2/20/20
to jenkinsc...@googlegroups.com
Garrett Smith updated an issue
 
Change By: Garrett Smith
Comment:
Is there a way around this? I'm even trying to log to a temporary file and I'm still seeing the stdout info.

garrett.j.smith@leidos.com (JIRA)

unread,
Feb 20, 2020, 10:35:03 AM2/20/20
to jenkinsc...@googlegroups.com
Garr commented on Improvement JENKINS-58425
 
Re: withMaven prints debug log and pollutes

+1 for adding " | tail -1" to mvn help:evaluate.

Reply all
Reply to author
Forward
0 new messages