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

PYTHONPATH gets undefined with latest 1.44 version of EnvInject

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Major Major
    • envinject-plugin
    • None
    • Jenkins 1.457, Windows master, Linux slave

      We are using envinject on our Linux slave. With version 1.36, we get the following behavior:

      08:51:39 [EnvInject] - Injecting environment variables from a build step.
      08:51:39 [EnvInject] - Injecting as environment variables the properties file path 'BuildFingerprint.txt'
      08:51:39 [EnvInject] - Variables injected successfully.
      08:51:39 [EnvInject] - Unset unresolved 'SRC_SHARED' variable.
      08:51:39 [EnvInject] - Unset unresolved 'PATH' variable.
      08:51:39 [EnvInject] - Unset unresolved 'NEWSCP' variable.
      08:51:39 [EnvInject] - Unset unresolved 'PYTHONPATH' variable.
      08:51:39 [EnvInject] - Unset unresolved 'TEMP' variable.

      But somehow, the variable PYTHONPATH is still set afterwards since we call a script found in the path and it works.

      With version 1.44, we get this:
      08:49:16 [EnvInject] - Injecting environment variables from a build step.
      08:49:16 [EnvInject] - Injecting as environment variables the properties file path 'BuildFingerprint.txt'
      08:49:16 [EnvInject] - Variables injected successfully.
      08:49:16 [EnvInject] - Unset unresolved 'PYTHONPATH' variable.

      Only PYTHONPATH gets undefined, but it really is. The next build step fails when calling the script because it is not found in the path.

      I don't know what changed between the builds, but reverting the plugin fixed it.

      Also, why does EnvInject undefines other variables? All I want is for it to inject the variables I asked. The ini files does not contain PYTHONPATH.

          [JENKINS-13325] PYTHONPATH gets undefined with latest 1.44 version of EnvInject

          Marc Sanfacon added a comment -

          Here is the ouput of the job running today with EnvInject 1.36
          12:38:15 + cp /mnt/buildsjenkins/7.0_RC_Continuous-20/BuildFingerprint.txt .
          12:38:15 [EnvInject] - Injecting environment variables from a build step.
          12:38:15 [EnvInject] - Injecting as environment variables the properties file path 'BuildFingerprint.txt'
          12:38:15 [EnvInject] - Variables injected successfully.
          12:38:15 [EnvInject] - Unset unresolved 'SRC_SHARED' variable.
          12:38:15 [EnvInject] - Unset unresolved 'PATH' variable.
          12:38:15 [EnvInject] - Unset unresolved 'NEWSCP' variable.
          12:38:15 [EnvInject] - Unset unresolved 'PYTHONPATH' variable.
          12:38:15 [EnvInject] - Unset unresolved 'TEMP' variable.

          And the content of /mnt/buildsjenkins/7.0_RC_Continuous-20/BuildFingerprint.txt
          [BuildInfo]
          BuildId=2012-04-10_12-37-30
          BuildNumber=20
          DBBuildNumber=4775
          BuildName=7.0_RC_Continuous-20
          SymbolStoreUUID=92113861832b11e1b3bf00219b99e084
          HGRev=c65e9f8e929175f8706a8a51bfecdb10da78503c
          Branch=prerelease-7.0-RC

          The config is the same that I already have attached.

          As I said, the Master Jenkins is running on Windows and the slave on Linux, I don't know if that changes anything.

          I can do more testing by creating a job that only injects the variables, if you want.

          Thanks

          Marc Sanfacon added a comment - Here is the ouput of the job running today with EnvInject 1.36 12:38:15 + cp /mnt/buildsjenkins/7.0_RC_Continuous-20/BuildFingerprint.txt . 12:38:15 [EnvInject] - Injecting environment variables from a build step. 12:38:15 [EnvInject] - Injecting as environment variables the properties file path 'BuildFingerprint.txt' 12:38:15 [EnvInject] - Variables injected successfully. 12:38:15 [EnvInject] - Unset unresolved 'SRC_SHARED' variable. 12:38:15 [EnvInject] - Unset unresolved 'PATH' variable. 12:38:15 [EnvInject] - Unset unresolved 'NEWSCP' variable. 12:38:15 [EnvInject] - Unset unresolved 'PYTHONPATH' variable. 12:38:15 [EnvInject] - Unset unresolved 'TEMP' variable. And the content of /mnt/buildsjenkins/7.0_RC_Continuous-20/BuildFingerprint.txt [BuildInfo] BuildId=2012-04-10_12-37-30 BuildNumber=20 DBBuildNumber=4775 BuildName=7.0_RC_Continuous-20 SymbolStoreUUID=92113861832b11e1b3bf00219b99e084 HGRev=c65e9f8e929175f8706a8a51bfecdb10da78503c Branch=prerelease-7.0-RC The config is the same that I already have attached. As I said, the Master Jenkins is running on Windows and the slave on Linux, I don't know if that changes anything. I can do more testing by creating a job that only injects the variables, if you want. Thanks

          Ok, I think I found it.
          The injected file doesn't cause the error.
          The problem is due to the internal EnvInject solving.
          EnvInject gets Jenkins and build environment variables and then tries to merge them.
          If a variable contains variable anymore, the variable is removed (or unset), it is not used by the Jenkins build).
          Therefore, I suppose PATH, SRC_SHARED, NEWSCP, PYTHONPATH and TEMP are predefined environment variables and these variables can't resolve each other.
          Could you check with the 'env' command?

          Gregory Boissinot added a comment - Ok, I think I found it. The injected file doesn't cause the error. The problem is due to the internal EnvInject solving. EnvInject gets Jenkins and build environment variables and then tries to merge them. If a variable contains variable anymore, the variable is removed (or unset), it is not used by the Jenkins build). Therefore, I suppose PATH, SRC_SHARED, NEWSCP, PYTHONPATH and TEMP are predefined environment variables and these variables can't resolve each other. Could you check with the 'env' command?

          Marc Sanfacon added a comment -

          They are indeed environment variables on the linux server. They are set in the .bash_profile file.

          They are defined like this:
          export DEVHOME=/usr/local/jenkins
          export SRC_SHARED=${DEVHOME}/Projects/Shared
          export NEWSCP=${DEVHOME}/Projects/DevTools/newscp

          1. Python scripts
            export PYTHONPATH=${PYTHONPATH}:${DEVHOME}/Projects/DevTools/newscp
            export PATH=${PATH}:${DEVHOME}/Projects/DevTools/newscp:${DEVHOME}/Projects/DevTools/redhat

          Does that help?
          I'm not sure I understand what you mean by: these variables can't resolve each other.

          Marc Sanfacon added a comment - They are indeed environment variables on the linux server. They are set in the .bash_profile file. They are defined like this: export DEVHOME=/usr/local/jenkins export SRC_SHARED=${DEVHOME}/Projects/Shared export NEWSCP=${DEVHOME}/Projects/DevTools/newscp Python scripts export PYTHONPATH=${PYTHONPATH}:${DEVHOME}/Projects/DevTools/newscp export PATH=${PATH}:${DEVHOME}/Projects/DevTools/newscp:${DEVHOME}/Projects/DevTools/redhat Does that help? I'm not sure I understand what you mean by: these variables can't resolve each other.

          I think these variables are not loaded by the Jenkins process.
          Could you check if Jenkins process reads the .bash_profile file?

          Jenkins expects to have all these variables resolved.
          For example:
          DEVHOME=/usr/local/jenkins
          SRC_SHARED=${DEVHOME}/Projects/Shared
          is OK because the SRC_SHARED variable can be resolved with DEVHOME value but only if DEVHOME is take into account (loaded by the Jenkins process).

          Please check 'Manage Jenkins > System Information' and check if each variable can be resolved.

          Gregory Boissinot added a comment - I think these variables are not loaded by the Jenkins process. Could you check if Jenkins process reads the .bash_profile file? Jenkins expects to have all these variables resolved. For example: DEVHOME=/usr/local/jenkins SRC_SHARED=${DEVHOME}/Projects/Shared is OK because the SRC_SHARED variable can be resolved with DEVHOME value but only if DEVHOME is take into account (loaded by the Jenkins process). Please check 'Manage Jenkins > System Information' and check if each variable can be resolved.

          Marc Sanfacon added a comment -

          The variables were not defined in the Jenkins process, only in the .bash_profile.

          Looks like the ssh command does not run the .bash_profile. I modified the launch script and they are now defined. I upgraded to the latest build of EnvInject (1.44) and it fixes the problem.

          Thanks

          Marc Sanfacon added a comment - The variables were not defined in the Jenkins process, only in the .bash_profile. Looks like the ssh command does not run the .bash_profile. I modified the launch script and they are now defined. I upgraded to the latest build of EnvInject (1.44) and it fixes the problem. Thanks

          I'm happy to read that

          Gregory Boissinot added a comment - I'm happy to read that

          Marc Sanfacon added a comment -

          Just upgraded to version 1.60 and I got this error, which looks the same...

          13:03:32 [EnvInject] - Injecting environment variables from a build step.
          13:03:32 [EnvInject] - Injecting as environment variables the properties file path 'BuildFingerprint.txt'
          13:03:32 [EnvInject] - Variables injected successfully.
          13:03:32 [EnvInject] - Unset unresolved 'PATH' variable.
          13:03:32 [EnvInject] - Unset unresolved 'PYTHONPATH' variable.

          Marc Sanfacon added a comment - Just upgraded to version 1.60 and I got this error, which looks the same... 13:03:32 [EnvInject] - Injecting environment variables from a build step. 13:03:32 [EnvInject] - Injecting as environment variables the properties file path 'BuildFingerprint.txt' 13:03:32 [EnvInject] - Variables injected successfully. 13:03:32 [EnvInject] - Unset unresolved 'PATH' variable. 13:03:32 [EnvInject] - Unset unresolved 'PYTHONPATH' variable.

          Should be fixed from EnvInject 1.61

          Gregory Boissinot added a comment - Should be fixed from EnvInject 1.61

          Is it fixed for your with the last version?
          Can I set the issue to Resolved?

          Gregory Boissinot added a comment - Is it fixed for your with the last version? Can I set the issue to Resolved?

          Marc Sanfacon added a comment -

          Validated fixed in 1.46

          Marc Sanfacon added a comment - Validated fixed in 1.46

            gbois Gregory Boissinot
            marcsanfacon Marc Sanfacon
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: