Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-32393

PATH and HOME are being overwritten when executing command

    Details

    • Similar Issues:

      Description

      when using the docker-custom-build-environment plugin, when it executes a bash script, it overwrites the PATH in the container with the PATH from the host.

      eg:

      08:57:37 [docker-ec2-cloud] $ docker exec --tty --user 1000: 2bd008eb80469148feb0bb3c6095e2731a755385abbedf0262f74b33f3cb46e9 env ... PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games PWD=/home/ubuntu HOME=/home/ubuntu ... /bin/bash /tmp/hudson4321343385196666792.sh
      

      For reference, when I pull the envs from the container running locally, i get this back for path and home

      PATH=/usr/local/bundle/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
      HOME=/root
      

      I don't think that it should include PATH or HOME, much like how JENKINS-30113 excluded path, but for some reason this was left in here.

        Attachments

          Issue Links

            Activity

            Hide
            scarrier Sylvie Carrier added a comment - - edited

            Hye,
            Same observation when building a maven project. The PATH expected and defined in the Dockerfile (through ENV command) is overwritten by the env ... PATH:... set in the docker exec command (Master configuration) => compilation failed with "java : not found" because PATH no more correct. Moreover, the PATH variable injected in the container is resolved on the Docker host and not in the container (ex: "PATH=$JAVA_HOME/bin:$PATH") whereas injection could be correct if the JAVA_HOME was passed to the container in order to be resoled in it and not on the Docker host. Perhaps escaping the $VAR could be a solution..But it would be nice to have a parameter in the plugin to "Inject master env PATH and Tools" or not.

            Show
            scarrier Sylvie Carrier added a comment - - edited Hye, Same observation when building a maven project. The PATH expected and defined in the Dockerfile (through ENV command) is overwritten by the env ... PATH:... set in the docker exec command (Master configuration) => compilation failed with "java : not found" because PATH no more correct. Moreover, the PATH variable injected in the container is resolved on the Docker host and not in the container (ex: "PATH=$JAVA_HOME/bin:$PATH") whereas injection could be correct if the JAVA_HOME was passed to the container in order to be resoled in it and not on the Docker host. Perhaps escaping the $VAR could be a solution..But it would be nice to have a parameter in the plugin to "Inject master env PATH and Tools" or not.
            Hide
            tcollignon Thomas Collignon added a comment -

            Hi, I have started a PR to fix this : https://github.com/jenkinsci/docker-custom-build-environment-plugin/pull/40

            I think it's just a beginning, but you can try it, and give your feelings.

            Thanks

            Show
            tcollignon Thomas Collignon added a comment - Hi, I have started a PR to fix this : https://github.com/jenkinsci/docker-custom-build-environment-plugin/pull/40 I think it's just a beginning, but you can try it, and give your feelings. Thanks
            Hide
            pgporada Phil Porada added a comment -

            I am experiencing this as well. Here is my current workaround on all jobs that use this plugin.

            Show
            pgporada Phil Porada added a comment - I am experiencing this as well. Here is my current workaround on all jobs that use this plugin.
            Hide
            hursh Daniel Hursh added a comment -

            I'm hitting this as well. Our images install various tools and define env variables that they need.  Things like JAVA_HOME, JRE_HOME, M2_HOME, ANT_HOME & GRADLE_HOME are all getting clobbered with the values from the docker host.  In addition PATH is getting clobbered.

             

            We really need a way to blacklist and / or whitelist variables that are to be passed into the container.  Several of the environment variables set on the host don't make sense for the images we use to build.

            Show
            hursh Daniel Hursh added a comment - I'm hitting this as well. Our images install various tools and define env variables that they need.  Things like JAVA_HOME, JRE_HOME, M2_HOME, ANT_HOME & GRADLE_HOME are all getting clobbered with the values from the docker host.  In addition PATH is getting clobbered.   We really need a way to blacklist and / or whitelist variables that are to be passed into the container.  Several of the environment variables set on the host don't make sense for the images we use to build.

              People

              • Assignee:
                Unassigned
                Reporter:
                jwhitcraft Jon Whitcraft
              • Votes:
                10 Vote for this issue
                Watchers:
                12 Start watching this issue

                Dates

                • Created:
                  Updated: