-
Type:
Bug
-
Resolution: Unresolved
-
Priority:
Major
-
Component/s: pipeline
Please, look at this simple pipeline script:
def build(label) {
// Set env globally (for all stages) on the current node
env.MYENVVAR = env.WORKSPACE
// Printout outside of stage
print('WORKSPACE 0=' + env.WORKSPACE)
print('MYENVVAR 0=' + env.MYENVVAR)
stage ('Stage 1' + label) { // Printout in a stage
print('WORKSPACE 1=' + env.WORKSPACE)
print('MYENVVAR 1=' + env.MYENVVAR)
}
}
// Main
parallel(
'Unix' : {
node ('build-linux') {
build('Unix')
}
},
'Windows' : {
node ('build-win') {
build('Windows')
}
}
)
This results to this output:
Running on build-linux in /home/build/jenkins/workspace/pipeline_bug_parallel_env_mixed_up
Running on build-win in c:\build\jenkins\pipeline_bug_parallel_env_mixed_up
[Unix] WORKSPACE 0=/home/build/jenkins/workspace/pipeline_bug_parallel_env_mixed_up
[Unix] MYENVVAR 0=/home/build/jenkins/workspace/pipeline_bug_parallel_env_mixed_up
[Windows] WORKSPACE 0=c:\build\jenkins\pipeline_bug_parallel_env_mixed_up
[Windows] MYENVVAR 0=c:\build\jenkins\pipeline_bug_parallel_env_mixed_up
[Unix] WORKSPACE 1=/home/build/jenkins/workspace/pipeline_bug_parallel_env_mixed_up
*[Unix] MYENVVAR 1=c:\build\jenkins\pipeline_bug_parallel_env_mixed_up* // BUG !!
[Windows] WORKSPACE 1=c:\build\jenkins\pipeline_bug_parallel_env_mixed_up
[Windows] MYENVVAR 1=c:\build\jenkins\pipeline_bug_parallel_env_mixed_up
So the bug is that the env.MYENVVAR inside the [Unix] parallel branch on Unix node somehow takes value of the [Windows] parallel branch.
Expected result: env.MYENVVAR = env.WORKSPACE before all stages should have assigned env.MYENVVAR for all further stages, because it was done outside the stage, that is globally for the node.
There is a workaround. If I change the pipeline script by adding withEnv{} this way it works:
def build(label) {
withEnv([ "MYENVVAR=" + env.WORKSPACE ]) { // WORKAROUND
// Global
//env.MYENVVAR = env.WORKSPACE
print('WORKSPACE 0=' + env.WORKSPACE)
print('MYENVVAR 0=' + env.MYENVVAR)
stage ('Stage 1' + label) {
print('WORKSPACE 1=' + env.WORKSPACE)
print('MYENVVAR 1=' + env.MYENVVAR)
}
}
}
I don't know if my example is supposed to be supported, but if not then please fix it so that the null value is assigned. If the variable in one node {} takes value from another parallel node {} in a random way that seems to be really wrong.