jenkinsci / jenkinsci/docker-workflow-plugin

[JENKINS-48284] pipeline-maven 3.0.3 update issues with certain maven plugins.

Open
#538 4 comments 0 reactions 0 assignees View on GitHub
component:docker-workflow-plugin component:pipeline-maven-plugin imported-jira-issue priority:major resolution:unresolved
Dominant language
Java
Stars
527
Forks
422
Avg merge
10m
Merged PRs (30d)
1

Description

Opening this issue as mentioned in JENKINS-47823.

 We are using a several maven plugins that uses cmake, boost libraries, etc, and after pipeline-maven update to 3.0.3, cmake and uname (used by cmake) are not found when running maven with settings file provided by Config File Management

Jenkinsfile example to trigger the issue.

 

node ('mydocker'){

    def dockerRegistryURI = 'registry_URI'
    def dockerImage = 'docker_image'
    docker.withRegistry("https://${dockerRegistryURI}/", "your_registry_id") {
        buildenv = docker.image("${dockerRegistryURI}/${dockerImage}")
        buildenv.pull()
        buildenv.inside("-v /var/lib/jenkins/.m2/repository/${EXECUTOR_NUMBER}:/home/jenkins/.m2/repository"){
            stage("Maven") {
                def mvnsettingsid = 'your_mvn_settings_id'
                echo '##################################'
                echo 'OUTSIDE WITHMAVEN'
                echo '##################################'
                sh "echo 'PATH outside withMaven:' $PATH"
                echo '##################################'
                sh "which cmake"
                echo '##################################'
                sh "env | grep ^PATH"
                echo '##################################'
                withMaven(mavenSettingsConfig: "${mvnsettingsid}") {
                    echo '##################################'
                    echo 'INSIDE WITHMAVEN'
                    echo '##################################'
                    sh "echo 'PATH inside withMaven:' $PATH"
                    echo '##################################'
                    sh "which cmake"
                    echo '##################################'
                    sh "env | grep ^PATH"
                    echo '##################################'
                    sh "export PATH=$MVN_CMD_DIR:$PATH && which mvn && which cmake"
                    echo '##################################'
                    sh "echo $PATH"
                    echo '##################################'
                    sh "which cmake"
                    echo '##################################'
                    sh "env | grep ^PATH"
                    echo '##################################'
                    deleteDir()
                }
            }
        }            
    }
}

Consule output:

 

[Pipeline] node

Running on mydocker in /var/lib/jenkins/workspace/Tests/withMaven_tests/withMaven-JENKINS-47823
[Pipeline] {
[Pipeline] withEnv
[Pipeline] {
[Pipeline] withDockerRegistry
Wrote authentication to /var/lib/jenkins/.dockercfg
[Pipeline] {
[Pipeline] sh
[withMaven-JENKINS-47823] Running shell script
+ docker pull registry_URI/docker_image
Using default tag: latest
latest: Pulling from docker_image
Digest: sha256:e66ca6defd6cbc4088d522d7ed38df9ac4324807e25acd97abf7a486be0778e0
Status: Image is up to date for registry_URI/docker_image:latest
[Pipeline] sh
[withMaven-JENKINS-47823] Running shell script
+ docker inspect -f . registry_URI/docker_image
.
[Pipeline] withDockerContainer
centos-buildserver-03 does not seem to be running inside a container
$ docker run -t -d -u 995:991 -v /var/lib/jenkins/.m2/repository/2:/home/jenkins/.m2/repository -w /var/lib/jenkins/workspace/Tests/withMaven_tests/withMaven-JENKINS-47823 -v /var/lib/jenkins/workspace/Tests/withMaven_tests/withMaven-JENKINS-47823:/var/lib/jenkins/workspace/Tests/withMaven_tests/withMaven-JENKINS-47823:rw,z -v /var/lib/jenkins/workspace/Tests/withMaven_tests/withMaven-JENKINS-47823@​tmp:/var/lib/jenkins/workspace/Tests/withMaven_tests/withMaven-JENKINS-47823@​tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** --entrypoint cat registry_URI/docker_image
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Maven)
[Pipeline] sh
[Pipeline] echo
##################################
[Pipeline] echo
OUTSIDE WITHMAVEN
[Pipeline] echo
##################################
[Pipeline] sh
[withMaven-JENKINS-47823] Running shell script
+ echo PATH outside withMaven: /usr/local/bin:/usr/bin
PATH outside withMaven: /usr/local/bin:/usr/bin
[Pipeline] echo
##################################
[Pipeline] sh
[withMaven-JENKINS-47823] Running shell script
+ which cmake
/opt/bin/cmake
[Pipeline] echo
##################################
[Pipeline] sh
[withMaven-JENKINS-47823] Running shell script
+ env
+ grep ^PATH
PATH=/opt/bin:/opt/sonar-runner-2.4/bin:/opt/apache-maven-3.1.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[Pipeline] echo
##################################
[Pipeline] withMaven
[withMaven] Options: []
[withMaven] Available options:
[withMaven] WARNING: "withMaven(){...}" step running within "docker.image('image').inside {...}". Since the Docker Pipeline Plugin version 1.14, you MUST:
[withMaven] * Either prepend the 'MVN_CMD_DIR' environment variable to the 'PATH' environment variable in every 'sh' step that invokes 'mvn' (e.g. "sh 'export PATH=$MVN_CMD_DIR:$PATH && mvn clean deploy' ").
[withMaven] * Or use Takari's Maven Wrapper (e.g. "sh './mvnw clean deploy'")
[withMaven] See Pipeline Maven Plugin FAQ.
[withMaven] use JDK installation provided by the build agent
[withMaven] use Maven settings provided by the Jenkins Managed Configuration File 'cb938b15-01f0-4c9d-adf2-8005204cb786'
[withMaven] use Maven settings.xml 'cb938b15-01f0-4c9d-adf2-8005204cb786' with NO Maven servers credentials provided by Jenkins
$ docker exec c2598b72293418339a94e1ae2d9f99dc623db90bf540146e0c34feea10dd43bc env printenv MAVEN_HOME
$ docker exec c2598b72293418339a94e1ae2d9f99dc623db90bf540146e0c34feea10dd43bc env printenv M2_HOME
$ docker exec c2598b72293418339a94e1ae2d9f99dc623db90bf540146e0c34feea10dd43bc env /bin/sh -c "which mvn"
[withMaven] use Maven installation provided by the build agent with executable /opt/apache-maven-3.1.1/bin/mvn
[Pipeline] {
[Pipeline] echo
##################################
[Pipeline] echo
INSIDE WITHMAVEN
[Pipeline] echo
##################################
[Pipeline] sh
[withMaven-JENKINS-47823] Running shell script
+ echo PATH inside withMaven: /var/lib/jenkins/workspace/Tests/withMaven_tests/withMaven-JENKINS-47823@​tmp/withMavene9754684:/usr/local/bin:/usr/bin
PATH inside withMaven: /var/lib/jenkins/workspace/Tests/withMaven_tests/withMaven-JENKINS-47823@​tmp/withMavene9754684:/usr/local/bin:/usr/bin
[Pipeline] echo
##################################
[Pipeline] sh
[withMaven-JENKINS-47823] Running shell script
+ which cmake
/opt/bin/cmake
[Pipeline] echo
##################################
[Pipeline] sh
[withMaven-JENKINS-47823] Running shell script
+ env
+ grep ^PATH
PATH=/opt/bin:/opt/sonar-runner-2.4/bin:/opt/apache-maven-3.1.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[Pipeline] echo
##################################
[Pipeline] sh
[withMaven-JENKINS-47823] Running shell script
+ export PATH=/var/lib/jenkins/workspace/Tests/withMaven_tests/withMaven-JENKINS-47823@​tmp/withMavene9754684:/var/lib/jenkins/workspace/Tests/withMaven_tests/withMaven-JENKINS-47823@​tmp/withMavene9754684:/usr/local/bin:/usr/bin
+ which mvn
/var/lib/jenkins/workspace/Tests/withMaven_tests/withMaven-JENKINS-47823@​tmp/withMavene9754684/mvn
+ which cmake
[Pipeline] }
[Pipeline] // withMaven
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
$ docker stop --time=1 c2598b72293418339a94e1ae2d9f99dc623db90bf540146e0c34feea10dd43bc
$ docker rm -f c2598b72293418339a94e1ae2d9f99dc623db90bf540146e0c34feea10dd43bc
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // withDockerRegistry
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
[withMaven] pipelineGraphPublisher - triggerDownstreamPipelines
[withMaven] Skip downstream job triggering for upstream build with ignored result status Tests/withMaven_tests/withMaven-JENKINS-47823 #35: FAILURE
ERROR: script returned exit code 1
Finished: FAILURE

 

which cmake command does not sucessfully run because is not found.

PATH variable is being used with different values by jenkins.

Doing sh "echo $PATH" and sh "env | grep ^PATH" displays 2 different values, and from my point of view, they should provide the same values.

Example from inside the container:

 

jenkins@​1e5054ecd825:~$ echo $PATH

/opt/bin:/opt/sonar-runner-2.4/bin:/opt/apache-maven-3.1.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
jenkins@​1e5054ecd825:~$ env | grep ^PATH
PATH=/opt/bin:/opt/sonar-runner-2.4/bin:/opt/apache-maven-3.1.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
jenkins@​1e5054ecd825:~$ which uname
/bin/uname

 

When adding /opt/bin like sh "export PATH=$MVN_CMD_DIR:$PATH:/bin:/opt/bin && which mvn && which cmake", cmake and uname are found.

This seems to cause any maven plugin that uses applications that were installed from source (in our case, cmake, etc), into a different folder, additional manual adjustment to PATH needs to be done, when exporting $MVN_CMD_DIR.

 

---
Originally reported by ncosta, imported from: pipeline-maven 3.0.3 update issues with certain maven plugins.


  • status: Open
  • priority: Major
  • component(s): docker-workflow-plugin, pipeline-maven-plugin
  • resolution: Unresolved
  • votes: 3
  • watchers: 6
  • imported: 2025-12-07

Raw content of original issue

Opening this issue as mentioned in JENKINS-47823.

 We are using a several maven plugins that uses cmake, boost libraries, etc, and after pipeline-maven update to 3.0.3, cmake and uname (used by cmake) are not found when running maven with settings file provided by Config File Management

Jenkinsfile example to trigger the issue.

 



node ('mydocker'){

    def dockerRegistryURI = 'registry_URI'
    def dockerImage = 'docker_image'
    docker.withRegistry("https://${dockerRegistryURI}/", "your_registry_id") {
        buildenv = docker.image("${dockerRegistryURI}/${dockerImage}")
        buildenv.pull()
        buildenv.inside("-v /var/lib/jenkins/.m2/repository/${EXECUTOR_NUMBER}:/home/jenkins/.m2/repository"){
            stage("Maven") {
                def mvnsettingsid = 'your_mvn_settings_id'
                echo '##################################'
                echo 'OUTSIDE WITHMAVEN'
                echo '##################################'
                sh "echo 'PATH outside withMaven:' $PATH"
                echo '##################################'
                sh "which cmake"
                echo '##################################'
                sh "env | grep ^PATH"
                echo '##################################'
                withMaven(mavenSettingsConfig: "${mvnsettingsid}") {
                    echo '##################################'
                    echo 'INSIDE WITHMAVEN'
                    echo '##################################'
                    sh "echo 'PATH inside withMaven:' $PATH"
                    echo '##################################'
                    sh "which cmake"
                    echo '##################################'
                    sh "env | grep ^PATH"
                    echo '##################################'
                    sh "export PATH=$MVN_CMD_DIR:$PATH && which mvn && which cmake"
                    echo '##################################'
                    sh "echo $PATH"
                    echo '##################################'
                    sh "which cmake"
                    echo '##################################'
                    sh "env | grep ^PATH"
                    echo '##################################'
                    deleteDir()
                }
            }
        }            
    }
}


Consule output:

 



[Pipeline] node

Running on mydocker in /var/lib/jenkins/workspace/Tests/withMaven_tests/withMaven-JENKINS-47823
[Pipeline] {
[Pipeline] withEnv
[Pipeline] {
[Pipeline] withDockerRegistry
Wrote authentication to /var/lib/jenkins/.dockercfg
[Pipeline] {
[Pipeline] sh
[withMaven-JENKINS-47823] Running shell script
+ docker pull registry_URI/docker_image
Using default tag: latest
latest: Pulling from docker_image
Digest: sha256:e66ca6defd6cbc4088d522d7ed38df9ac4324807e25acd97abf7a486be0778e0
Status: Image is up to date for registry_URI/docker_image:latest
[Pipeline] sh
[withMaven-JENKINS-47823] Running shell script
+ docker inspect -f . registry_URI/docker_image
.
[Pipeline] withDockerContainer
centos-buildserver-03 does not seem to be running inside a container
$ docker run -t -d -u 995:991 -v /var/lib/jenkins/.m2/repository/2:/home/jenkins/.m2/repository -w /var/lib/jenkins/workspace/Tests/withMaven_tests/withMaven-JENKINS-47823 -v /var/lib/jenkins/workspace/Tests/withMaven_tests/withMaven-JENKINS-47823:/var/lib/jenkins/workspace/Tests/withMaven_tests/withMaven-JENKINS-47823:rw,z -v /var/lib/jenkins/workspace/Tests/withMaven_tests/withMaven-JENKINS-47823@tmp:/var/lib/jenkins/workspace/Tests/withMaven_tests/withMaven-JENKINS-47823@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** --entrypoint cat registry_URI/docker_image
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Maven)
[Pipeline] sh
[Pipeline] echo
##################################
[Pipeline] echo
OUTSIDE WITHMAVEN
[Pipeline] echo
##################################
[Pipeline] sh
[withMaven-JENKINS-47823] Running shell script
+ echo PATH outside withMaven: /usr/local/bin:/usr/bin
PATH outside withMaven: /usr/local/bin:/usr/bin
[Pipeline] echo
##################################
[Pipeline] sh
[withMaven-JENKINS-47823] Running shell script
+ which cmake
/opt/bin/cmake
[Pipeline] echo
##################################
[Pipeline] sh
[withMaven-JENKINS-47823] Running shell script
+ env
+ grep ^PATH
PATH=/opt/bin:/opt/sonar-runner-2.4/bin:/opt/apache-maven-3.1.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[Pipeline] echo
##################################
[Pipeline] withMaven
[withMaven] Options: []
[withMaven] Available options:
[withMaven] WARNING: "withMaven(){...}" step running within "docker.image('image').inside {...}". Since the Docker Pipeline Plugin version 1.14, you MUST:
[withMaven] * Either prepend the 'MVN_CMD_DIR' environment variable to the 'PATH' environment variable in every 'sh' step that invokes 'mvn' (e.g. "sh 'export PATH=$MVN_CMD_DIR:$PATH && mvn clean deploy' ").
[withMaven] * Or use Takari's Maven Wrapper (e.g. "sh './mvnw clean deploy'")
[withMaven] See Pipeline Maven Plugin FAQ.
[withMaven] use JDK installation provided by the build agent
[withMaven] use Maven settings provided by the Jenkins Managed Configuration File 'cb938b15-01f0-4c9d-adf2-8005204cb786'
[withMaven] use Maven settings.xml 'cb938b15-01f0-4c9d-adf2-8005204cb786' with NO Maven servers credentials provided by Jenkins
$ docker exec c2598b72293418339a94e1ae2d9f99dc623db90bf540146e0c34feea10dd43bc env printenv MAVEN_HOME
$ docker exec c2598b72293418339a94e1ae2d9f99dc623db90bf540146e0c34feea10dd43bc env printenv M2_HOME
$ docker exec c2598b72293418339a94e1ae2d9f99dc623db90bf540146e0c34feea10dd43bc env /bin/sh -c "which mvn"
[withMaven] use Maven installation provided by the build agent with executable /opt/apache-maven-3.1.1/bin/mvn
[Pipeline] {
[Pipeline] echo
##################################
[Pipeline] echo
INSIDE WITHMAVEN
[Pipeline] echo
##################################
[Pipeline] sh
[withMaven-JENKINS-47823] Running shell script
+ echo PATH inside withMaven: /var/lib/jenkins/workspace/Tests/withMaven_tests/withMaven-JENKINS-47823@tmp/withMavene9754684:/usr/local/bin:/usr/bin
PATH inside withMaven: /var/lib/jenkins/workspace/Tests/withMaven_tests/withMaven-JENKINS-47823@tmp/withMavene9754684:/usr/local/bin:/usr/bin
[Pipeline] echo
##################################
[Pipeline] sh
[withMaven-JENKINS-47823] Running shell script
+ which cmake
/opt/bin/cmake
[Pipeline] echo
##################################
[Pipeline] sh
[withMaven-JENKINS-47823] Running shell script
+ env
+ grep ^PATH
PATH=/opt/bin:/opt/sonar-runner-2.4/bin:/opt/apache-maven-3.1.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[Pipeline] echo
##################################
[Pipeline] sh
[withMaven-JENKINS-47823] Running shell script
+ export PATH=/var/lib/jenkins/workspace/Tests/withMaven_tests/withMaven-JENKINS-47823@tmp/withMavene9754684:/var/lib/jenkins/workspace/Tests/withMaven_tests/withMaven-JENKINS-47823@tmp/withMavene9754684:/usr/local/bin:/usr/bin
+ which mvn
/var/lib/jenkins/workspace/Tests/withMaven_tests/withMaven-JENKINS-47823@tmp/withMavene9754684/mvn
+ which cmake
[Pipeline] }
[Pipeline] // withMaven
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
$ docker stop --time=1 c2598b72293418339a94e1ae2d9f99dc623db90bf540146e0c34feea10dd43bc
$ docker rm -f c2598b72293418339a94e1ae2d9f99dc623db90bf540146e0c34feea10dd43bc
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // withDockerRegistry
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
[withMaven] pipelineGraphPublisher - triggerDownstreamPipelines
[withMaven] Skip downstream job triggering for upstream build with ignored result status Tests/withMaven_tests/withMaven-JENKINS-47823 #35: FAILURE
ERROR: script returned exit code 1
Finished: FAILURE


 

which cmake command does not sucessfully run because is not found.

PATH variable is being used with different values by jenkins.
Doing sh "echo $PATH" and sh "env | grep ^PATH" displays 2 different values, and from my point of view, they should provide the same values.

Example from inside the container:

 



jenkins@1e5054ecd825:~$ echo $PATH

/opt/bin:/opt/sonar-runner-2.4/bin:/opt/apache-maven-3.1.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
jenkins@1e5054ecd825:~$ env | grep ^PATH
PATH=/opt/bin:/opt/sonar-runner-2.4/bin:/opt/apache-maven-3.1.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
jenkins@1e5054ecd825:~$ which uname
/bin/uname


 

When adding /opt/bin like sh "export PATH=$MVN_CMD_DIR:$PATH:/bin:/opt/bin && which mvn && which cmake", cmake and uname are found.

This seems to cause any maven plugin that uses applications that were installed from source (in our case, cmake, etc), into a different folder, additional manual adjustment to PATH needs to be done, when exporting $MVN_CMD_DIR.

 

environment

```
CentOS7 Jenkins 2.92 with plugins fully updated since 20171128

CentOS7 Build Server

Ubuntu 12.04 based custom docker image, running on Build Server.
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.