code: public @Nonnull EnvVars getEnvironment(@CheckForNull Node node, @Nonnull TaskListener listener) throws IOException, InterruptedException {
          EnvVars env = new EnvVars();
  
          if (node != null) {
              final Computer computer = node.toComputer();
              if (computer != null) {
                  // we need to get computer environment to inherit platform details 
                  env = computer.getEnvironment();
                  env.putAll(computer.buildEnvironment(listener));
              }
          }
  
          env.putAll(getCharacteristicEnvVars());
  
          // servlet container may have set CLASSPATH in its launch script,
          // so don't let that inherit to the new child process.
          // see http://www.nabble.com/Run-Job-with-JDK-1.4.2-tf4468601.html
          env.put("CLASSPATH","");
  
          // apply them in a reverse order so that higher ordinal ones can modify values added by lower ordinal ones
          for (EnvironmentContributor ec : EnvironmentContributor.all().reverseView())
              ec.buildEnvironmentFor(this,env,listener);
  
  
          return env;
      }
docs: Creates an environment variable override for launching processes for this project.
  
  <p>
  This is for process launching outside the build execution (such as polling, tagging, deployment, etc.)
  that happens in a context of a specific job.
  
  @param node
  Node to eventually run a process on. The implementation must cope with this parameter being null
  (in which case none of the node specific properties would be reflected in the resulting override.)