Alexis_Shef_777
Alexis_Shef_777

Reputation: 133

Jenkins Workspaces are not created for Parallel Stages created inside the Pipeline Script

Jenkins Custom Workspaces are not created for Parallel Stages created inside the Pipeline Script

Only the main Custom Workspace "main_ws" is created.

Why are Custom Workspaces for parallel script-generated stages not created and how can I fix this?

def getTests(Name, Versions) {
    return Versions.collectEntries { version ->
        [
                (version): {
                    stage("${Name}:${version} Tests") {
                        agent {
                            node {
                                label "docker"
                                customWorkspace "${Name}${version}"
                            }
                        }
                        script {
                            bat "echo Testing the ${Name}:${version}"
                        }
                    }
                }
        ]
    }
}


pipeline {
  agent {
    label "docker"
  }

  tools {
    gradle "gradle"
  }

  parameters {
    text(name: 'VERSIONS', defaultValue: '1.0\n2.0\n3.0\n', description: '')
    booleanParam(name: 'NAME', defaultValue: false, description: '')
  }
  stages {
    stage('Tests') {
      parallel {
        stage('Tests') {
          when {
            expression {
              return params.NAME
            }
          }
          agent {
            node {
              label "docker"
              customWorkspace "main_ws"
            }
          }
          steps {
            script {
              def versions = params.VERSIONS.split("\n")
              parallel getTests("NAME", versions)
            }
          }
        }
      }
    }
  }
}

Upvotes: 0

Views: 45

Answers (1)

Iterokun
Iterokun

Reputation: 2546

Declarative syntax inside scripted syntax doesn't work the same way as outside. Outside the script step pipeline and stage are keywords and accept agent keyword. Inside the script step pipeline and stage are steps that know nothing agent keyword anymore. The corresponding scripted syntax is node and ws, see here.

Upvotes: 1

Related Questions