jenkinsci / jenkinsci/docker-workflow-plugin

[JENKINS-65545] env vars are not consistent

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

Description

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.

---
Originally reported by spugachev, imported from: env vars are not consistent


  • status: Open
  • priority: Minor
  • component(s): docker-workflow-plugin
  • resolution: Unresolved
  • votes: 0
  • watchers: 2
  • imported: 2025-12-07

Raw content of original issue

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.


environment

```
jenkins 2.287

docker-plugin: 1.2.2

docker-workflow: 1.2.6
```

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.