-
Bug
-
Resolution: Not A Defect
-
Major
-
None
Hi,
I am using withMaven() to execute maven with a custom settings.xml in a kubernetes pod. The detection of the maven executable is broken at the moment, since
org.jenkinsci.plugins.pipeline.maven.WithMavenStepExecution.readFromProcess("/bin/sh", "-c", "which mvn");
returns two lines of text:
/usr/bin/mvn EXITCODE 0
resulting in [withMaven] using Maven installation provided by the build agent with executable /usr/bin/mvn EXITCODE 0
The exit code part seems to be generated by:
org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator.doExec()
I am not sure, why the last line is included, since when I execute /bin/sh -c 'which mvn' in the pipeline, I get only /usr/bin/mvn in return.
Minimal pipeline example to reproduce:
def label = "mypod-${UUID.randomUUID().toString()}" podTemplate(label: label, containers: [ containerTemplate(name: 'maven', image: 'maven:3.5.2-jdk-8', ttyEnabled: true, command: 'cat') ]) { node(label) { stage('Build') { container('maven') { withMaven(mavenSettingsConfig: 'maven-mirror-settings') { sh "ls -la ${MVN_CMD_DIR}" sh "cat ${MVN_CMD_DIR}/mvn*" sh "/bin/sh -c 'which mvn'" sh "mvn -v" } } } } }
Logs:
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] podTemplate
[Pipeline] {
[Pipeline] node
Still waiting to schedule task
jenkins-slave-rg789-w09w8 is offline
Running on jenkins-slave-rg789-w09w8 in /home/jenkins/workspace/Microservice
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Build)
[Pipeline] container
[Pipeline] {
[Pipeline] withMaven
[withMaven] Options: []
[withMaven] Available options:
[withMaven] using JDK installation provided by the build agent
[withMaven] using Maven settings provided by the Jenkins Managed Configuration File 'maven-mirror-settings'
[withMaven] using Maven settings.xml 'maven-mirror-settings' with NO Maven servers credentials provided by Jenkins
[withMaven] using Maven global settings provided by the Jenkins global configuration. Maven global settings defined by 'DefaultSettingsProvider', NOT overriding it.
Executing shell script inside container [maven] of pod [jenkins-slave-rg789-w09w8]
Executing command: "/bin/sh" "-c" "which mvn"
printf "EXITCODE %3d" $?; exit
/usr/bin/mvn
EXITCODE 0[withMaven] using Maven installation provided by the build agent with executable /usr/bin/mvn EXITCODE 0
[Pipeline] {
[Pipeline] sh
[Microservice] Running shell script
+ ls -la /home/jenkins/workspace/Microservice@tmp/withMavenef1a673d
total 60
drwxr-xr-x 2 10000 10000 4096 Feb 27 10:17 .
drwxr-xr-x 4 10000 10000 4096 Feb 27 10:17 ..
-rwxr-xr-x 1 10000 10000 202 Feb 27 10:17 mvn EXITCODE 0
-rw-r--r-- 1 10000 10000 44289 Feb 27 10:17 pipeline-maven-spy.jar
-rw-r--r-- 1 10000 10000 3432 Feb 27 10:17 settings.xml
[Pipeline] sh
[Microservice] Running shell script
+ cat /home/jenkins/workspace/Microservice@tmp/withMavenef1a673d/mvn EXITCODE 0
#!/bin/sh -e
echo ----- withMaven Wrapper script -----
"/usr/bin/mvn EXITCODE 0" --batch-mode --show-version --settings "/home/jenkins/workspace/Microservice@tmp/withMavenef1a673d/settings.xml" "$@"
[Pipeline] sh
[Microservice] Running shell script
+ /bin/sh -c which mvn
/usr/bin/mvn
[Pipeline] sh
[Microservice] Running shell script
+ mvn -v
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T07:58:13Z)
Maven home: /usr/share/maven
Java version: 1.8.0_151, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: en, platform encoding: UTF-8
OS name: "linux", version: "4.4.0-21-generic", arch: "amd64", family: "unix"
[Pipeline] }
[Pipeline] // withMaven
[Pipeline] }
[Pipeline] // container
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] }
[Pipeline] // podTemplate
[Pipeline] End of Pipeline
Finished: SUCCESS
Some snippets from the jenkins log file:
When running /bin/sh -c 'which mvn' from WithMavenStepExecution.readFromProcess:
Feb 27, 2018 10:31:37 AM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator Executing command: "/bin/sh" "-c" "which mvn" printf "EXITCODE %3d" $?; exit
When running /bin/sh -c 'which mvn' from the pipeline:
Feb 27, 2018 10:31:38 AM FINEST org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator
Executing command: "nohup" "sh" "-c" "{ while [ -d '/home/jenkins/workspace/Microservice@tmp/durable-e808e5c0' -a \! -f '/home/jenkins/workspace/Microservice@tmp/durable-e808e5c0/jenkins-result.txt' ]; do touch '/home/jenkins/workspace/Microservice@tmp/durable-e808e5c0/jenkins-log.txt'; sleep 3; done } & jsc=durable-370fa533571e05498bc0456bb0ba11e9; JENKINS_SERVER_COOKIE=\$jsc '/home/jenkins/workspace/Microservice@tmp/durable-e808e5c0/script.sh' > '/home/jenkins/workspace/Microservice@tmp/durable-e808e5c0/jenkins-log.txt' 2>&1; echo \$? > '/home/jenkins/workspace/Microservice@tmp/durable-e808e5c0/jenkins-result.txt'; wait"
printf "EXITCODE %3d" $?; exit
- depends on
-
JENKINS-50392 Use the right API to get process' exitcode
-
- Resolved
-