-
Bug
-
Resolution: Unresolved
-
Minor
-
None
-
jenkins 2.287
docker-plugin: 1.2.2
docker-workflow: 1.2.6
I'm trying to do something like this:
node { stage('reproduce') { sh """ echo '1' printenv PATH echo "$PATH" """ docker.image('python:3.6.4-slim').inside { sh """ echo '2' printenv PATH echo "$PATH" """ withEnv(["PATH=$PATH:/my/custom/path"]) { sh """ echo '3' printenv PATH echo "$PATH" """ } } } }
sh (1) gives me:
+ printenv PATH /opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + echo /opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
all is good so far
sh (2) gives me:
+ printenv PATH /usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + echo /opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
which is already confusing
sh (3) gives:
+ printenv PATH /usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + echo /opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/my/custom/path /opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/my/custom/path
I have couple of questions about this:
- why printenv and echo in sh(2) show different results? sounds like printenv prints original env which comes from docker image while echo prints value from host jenkins.
- why withEnv which is executed inside docker container does not modify docker's PATH but modifies Jenkins's PATH.
This also does not work for us. But we use a workaround like
sh makeEnvList(envList) + ' echo "$PATH" '
...
String makeEnvList(env){
String s = '\n'
for(int i = 0; i < env.size(); i++)
s += 'export ' + env[i]
return s
}
Ps. Written on my phone keyboard. Therefore is possible that the snippet has wrong syntax. But I think like example it is enough.