Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-61828

Failing with java.lang.IndexOutOfBoundsException while using environment block

      I am using DSL for the Jenkins pipeline as code. This particular piece of code runs fine .

      pipeline {
          agent {
              label 'master'
          }
      
          stages {
              stage('test script') {
                  steps {
                      script {
                          env.Environment_Name = input(id: 'Env', message: 'Select Environment', 
                              parameters: [[$class: 'ChoiceParameterDefinition', choices: 'test-1\ntest-2\ntest-3', description: '', name: '']]) 
                          println ".... $Environment_Name"
                          def allCreds = sh(returnStdout: true, 
                              script: "cat $JENKINS_HOME/jobs/$Environment_Name/config.xml | grep \"<id>\" | cut -d'>' -f2 | cut -d'<' -f1").trim().split('\n').join('\n')
                          println "----- $allCreds"
                          env.Cred_Name = input(id: 'Cred', message: 'Select Credential to Update', 
                              parameters: [[$class: 'ChoiceParameterDefinition', choices: allCreds, description: '', name: '']])
                          println "----- $Cred_Name"
                          env.User_Name = input(id: 'User_Name', message: 'Enter Username', 
                              parameters: [[$class: 'TextParameterDefinition', description: 'Username', name: 'User_Name']])
                      }
                  }
              }
              stage('print the variables') {
                  steps {
                      echo "${Environment_Name}"
                      echo "${User_Name}"
                  }
              }
          }
      } 
      

       
      But when I add environment block to this code it fails with the following exception java.lang.IndexOutOfBoundsException at hudson.MarkupText.rangeCheck(MarkupText.java:276)

      pipeline {
          agent {
              label 'master'
          }
      
          environment {
              JENKINS_CREDS = credentials('JENKINS_CREDS')
          }
      
          stages {
              stage('test script') {
                  steps {
                      script {
                          env.Environment_Name = input(id: 'Env', message: 'Select Environment', 
                              parameters: [[$class: 'ChoiceParameterDefinition', choices: 'test-1\ntest-2\ntest-3', description: '', name: '']]) 
                          println ".... $Environment_Name"
                          def allCreds = sh(returnStdout: true, 
                              script: "cat $JENKINS_HOME/jobs/$Environment_Name/config.xml | grep \"<id>\" | cut -d'>' -f2 | cut -d'<' -f1").trim().split('\n').join('\n')
                          println "----- $allCreds"
                          env.Cred_Name = input(id: 'Cred', message: 'Select Credential to Update', 
                              parameters: [[$class: 'ChoiceParameterDefinition', choices: allCreds, description: '', name: '']])
                          println "----- $Cred_Name"
                          env.User_Name = input(id: 'User_Name', message: 'Enter Username', 
                              parameters: [[$class: 'TextParameterDefinition', description: 'Username', name: 'User_Name']])
                      }
                  }
              }
              stage('print the variables') {
                  steps {
                      echo "${Environment_Name}"
                      echo "${User_Name}"
                      echo "${JENKINS_CREDS_USR}"
                  }
              }
          }
      } 
      

       

      I have tested this code against the Jenkins version  2.222.1 and it runs without an error but fails when running in the version 2.204.5.

          [JENKINS-61828] Failing with java.lang.IndexOutOfBoundsException while using environment block

          Anurag Parchuri created issue -
          Anurag Parchuri made changes -
          Attachment New: Screenshot 2020-04-07 at 3.03.39 PM.png [ 50907 ]
          Liam Newman made changes -
          Description Original: I am using DSL for the Jenkins pipeline as code. This particular piece of code runs fine .

          pipeline {
           agent {
           label 'master'
           }

           stages {
           stage('test script') {
           steps {
           script {
           env.Environment_Name = input( id: 'Env', message: 'Select Environment', parameters: [ [$class: 'ChoiceParameterDefinition', choices: 'test-1\ntest-2\ntest-3', description: '', name: ''] ])
           println ".... $Environment_Name"
           
           def allCreds = sh(returnStdout: true, script: "cat $JENKINS_HOME/jobs/$Environment_Name/config.xml | grep \"<id>\" | cut -d'>' -f2 | cut -d'<' -f1").trim().split('\n').join('\n')
           println "----- $allCreds"
           
           env.Cred_Name = input( id: 'Cred', message: 'Select Credential to Update', parameters: [ [$class: 'ChoiceParameterDefinition', choices: allCreds, description: '', name: ''] ])
           println "----- $Cred_Name"
           
           env.User_Name = input(id: 'User_Name', message: 'Enter Username',parameters: [ [$class: 'TextParameterDefinition', description: 'Username', name: 'User_Name'] ])
           }
           }
           }
           stage('print the variables'){
           steps{
           echo "${Environment_Name}"
           echo "${User_Name}"
           }
           }
           }
           }

           

          But when I add environment block to this code it fails with the following *exception java.lang.IndexOutOfBoundsException at hudson.MarkupText.rangeCheck(MarkupText.java:276)*

           

          pipeline {
           agent {
           label 'master'
           }
           *environment{*
           *JENKINS_CREDS = credentials('JENKINS_CREDS')*
           *}*
           stages {
           stage('test script') {
           steps {
           script {
           env.Environment_Name = input( id: 'Env', message: 'Select Environment', parameters: [ [$class: 'ChoiceParameterDefinition', choices: 'test-1\ntest-2\ntest-3', description: '', name: ''] ])
           println ".... $Environment_Name"
           
           def allCreds = sh(returnStdout: true, script: "cat $JENKINS_HOME/jobs/$Environment_Name/config.xml | grep \"<id>\" | cut -d'>' -f2 | cut -d'<' -f1").trim().split('\n').join('\n')
           println "----- $allCreds"
           
           env.Cred_Name = input( id: 'Cred', message: 'Select Credential to Update', parameters: [ [$class: 'ChoiceParameterDefinition', choices: allCreds, description: '', name: ''] ])
           println "----- $Cred_Name"
           
           env.User_Name = input(id: 'User_Name', message: 'Enter Username',parameters: [ [$class: 'TextParameterDefinition', description: 'Username', name: 'User_Name'] ])
           }
           }
           }
           stage('print the variables'){
           steps{
           echo "${Environment_Name}"
           echo "${User_Name}"
           *echo "${JENKINS_CREDS_USR}"*
           }
           }
           }
           }

          I have tested this code against the Jenkins version [ *2.222.1* and it runs without an error but fails when running in the version 2.204.5.|https://jenkins.io/]
          New: I am using DSL for the Jenkins pipeline as code. This particular piece of code runs fine .


          {code:groovy}
          pipeline {
              agent

              {
                  label 'master'
              }

              stages {
                  stage('test script') {
                      steps {
                          script {
                              env.Environment_Name = input(id: 'Env', message: 'Select Environment', parameters: [[$class: 'ChoiceParameterDefinition', choices: 'test-1\ntest-2\ntest-3', description: '', name: '']])
                              println ".... $Environment_Name"
                              def allCreds = sh(returnStdout: true, script: "cat $JENKINS_HOME/jobs/$Environment_Name/config.xml | grep \"<id>\" | cut -d'>' -f2 | cut -d'<' -f1").trim().split('\n').join('\n')
                              println "----- $allCreds"
                              env.Cred_Name = input(id: 'Cred', message: 'Select Credential to Update', parameters: [[$class: 'ChoiceParameterDefinition', choices: allCreds, description: '', name: '']])
                              println "----- $Cred_Name"
                              env.User_Name = input(id: 'User_Name', message: 'Enter Username', parameters: [[$class: 'TextParameterDefinition', description: 'Username', name: 'User_Name']])
                          }
                      }
                  }
                  stage('print the variables') {
                      steps {
                          echo "${Environment_Name}"
                          echo "${User_Name}"
                      }
                  }
              }
          }
          {code}
           
          But when I add environment block to this code it fails with the following *exception java.lang.IndexOutOfBoundsException at hudson.MarkupText.rangeCheck(MarkupText.java:276)*

           

          pipeline {
           agent {
           label 'master'
           }
           *environment{*
           *JENKINS_CREDS = credentials('JENKINS_CREDS')*
           *}*
           stages {
           stage('test script') {
           steps {
           script {
           env.Environment_Name = input( id: 'Env', message: 'Select Environment', parameters: [ [$class: 'ChoiceParameterDefinition', choices: 'test-1\ntest-2\ntest-3', description: '', name: ''] ])
           println ".... $Environment_Name"
           
           def allCreds = sh(returnStdout: true, script: "cat $JENKINS_HOME/jobs/$Environment_Name/config.xml | grep \"<id>\" | cut -d'>' -f2 | cut -d'<' -f1").trim().split('\n').join('\n')
           println "----- $allCreds"
           
           env.Cred_Name = input( id: 'Cred', message: 'Select Credential to Update', parameters: [ [$class: 'ChoiceParameterDefinition', choices: allCreds, description: '', name: ''] ])
           println "----- $Cred_Name"
           
           env.User_Name = input(id: 'User_Name', message: 'Enter Username',parameters: [ [$class: 'TextParameterDefinition', description: 'Username', name: 'User_Name'] ])
           }
           }
           }
           stage('print the variables'){
           steps{
           echo "${Environment_Name}"
           echo "${User_Name}"
           *echo "${JENKINS_CREDS_USR}"*
           }
           }
           }
           }

          I have tested this code against the Jenkins version [ *2.222.1* and it runs without an error but fails when running in the version 2.204.5.|https://jenkins.io/]
          Liam Newman made changes -
          Description Original: I am using DSL for the Jenkins pipeline as code. This particular piece of code runs fine .


          {code:groovy}
          pipeline {
              agent

              {
                  label 'master'
              }

              stages {
                  stage('test script') {
                      steps {
                          script {
                              env.Environment_Name = input(id: 'Env', message: 'Select Environment', parameters: [[$class: 'ChoiceParameterDefinition', choices: 'test-1\ntest-2\ntest-3', description: '', name: '']])
                              println ".... $Environment_Name"
                              def allCreds = sh(returnStdout: true, script: "cat $JENKINS_HOME/jobs/$Environment_Name/config.xml | grep \"<id>\" | cut -d'>' -f2 | cut -d'<' -f1").trim().split('\n').join('\n')
                              println "----- $allCreds"
                              env.Cred_Name = input(id: 'Cred', message: 'Select Credential to Update', parameters: [[$class: 'ChoiceParameterDefinition', choices: allCreds, description: '', name: '']])
                              println "----- $Cred_Name"
                              env.User_Name = input(id: 'User_Name', message: 'Enter Username', parameters: [[$class: 'TextParameterDefinition', description: 'Username', name: 'User_Name']])
                          }
                      }
                  }
                  stage('print the variables') {
                      steps {
                          echo "${Environment_Name}"
                          echo "${User_Name}"
                      }
                  }
              }
          }
          {code}
           
          But when I add environment block to this code it fails with the following *exception java.lang.IndexOutOfBoundsException at hudson.MarkupText.rangeCheck(MarkupText.java:276)*

           

          pipeline {
           agent {
           label 'master'
           }
           *environment{*
           *JENKINS_CREDS = credentials('JENKINS_CREDS')*
           *}*
           stages {
           stage('test script') {
           steps {
           script {
           env.Environment_Name = input( id: 'Env', message: 'Select Environment', parameters: [ [$class: 'ChoiceParameterDefinition', choices: 'test-1\ntest-2\ntest-3', description: '', name: ''] ])
           println ".... $Environment_Name"
           
           def allCreds = sh(returnStdout: true, script: "cat $JENKINS_HOME/jobs/$Environment_Name/config.xml | grep \"<id>\" | cut -d'>' -f2 | cut -d'<' -f1").trim().split('\n').join('\n')
           println "----- $allCreds"
           
           env.Cred_Name = input( id: 'Cred', message: 'Select Credential to Update', parameters: [ [$class: 'ChoiceParameterDefinition', choices: allCreds, description: '', name: ''] ])
           println "----- $Cred_Name"
           
           env.User_Name = input(id: 'User_Name', message: 'Enter Username',parameters: [ [$class: 'TextParameterDefinition', description: 'Username', name: 'User_Name'] ])
           }
           }
           }
           stage('print the variables'){
           steps{
           echo "${Environment_Name}"
           echo "${User_Name}"
           *echo "${JENKINS_CREDS_USR}"*
           }
           }
           }
           }

          I have tested this code against the Jenkins version [ *2.222.1* and it runs without an error but fails when running in the version 2.204.5.|https://jenkins.io/]
          New: I am using DSL for the Jenkins pipeline as code. This particular piece of code runs fine .


          {code:groovy}
          pipeline {
              agent

              {
                  label 'master'
              }

              stages {
                  stage('test script') {
                      steps {
                          script {
                              env.Environment_Name = input(id: 'Env', message: 'Select Environment',
                                  parameters: [[$class: 'ChoiceParameterDefinition', choices: 'test-1\ntest-2\ntest-3', description: '', name: '']])
                              println ".... $Environment_Name"
                              def allCreds = sh(returnStdout: true,
                                  script: "cat $JENKINS_HOME/jobs/$Environment_Name/config.xml | grep \"<id>\" | cut -d'>' -f2 | cut -d'<' -f1").trim().split('\n').join('\n')
                              println "----- $allCreds"
                              env.Cred_Name = input(id: 'Cred', message: 'Select Credential to Update',
                                  parameters: [[$class: 'ChoiceParameterDefinition', choices: allCreds, description: '', name: '']])
                              println "----- $Cred_Name"
                              env.User_Name = input(id: 'User_Name', message: 'Enter Username',
                                  parameters: [[$class: 'TextParameterDefinition', description: 'Username', name: 'User_Name']])
                          }
                      }
                  }
                  stage('print the variables') {
                      steps {
                          echo "${Environment_Name}"
                          echo "${User_Name}"
                      }
                  }
              }
          }
          {code}
           
          But when I add environment block to this code it fails with the following *exception java.lang.IndexOutOfBoundsException at hudson.MarkupText.rangeCheck(MarkupText.java:276)*

           

          pipeline {
           agent {
           label 'master'
           }
           *environment{*
           *JENKINS_CREDS = credentials('JENKINS_CREDS')*
           *}*
           stages {
           stage('test script') {
           steps {
           script {
           env.Environment_Name = input( id: 'Env', message: 'Select Environment', parameters: [ [$class: 'ChoiceParameterDefinition', choices: 'test-1\ntest-2\ntest-3', description: '', name: ''] ])
           println ".... $Environment_Name"
           
           def allCreds = sh(returnStdout: true, script: "cat $JENKINS_HOME/jobs/$Environment_Name/config.xml | grep \"<id>\" | cut -d'>' -f2 | cut -d'<' -f1").trim().split('\n').join('\n')
           println "----- $allCreds"
           
           env.Cred_Name = input( id: 'Cred', message: 'Select Credential to Update', parameters: [ [$class: 'ChoiceParameterDefinition', choices: allCreds, description: '', name: ''] ])
           println "----- $Cred_Name"
           
           env.User_Name = input(id: 'User_Name', message: 'Enter Username',parameters: [ [$class: 'TextParameterDefinition', description: 'Username', name: 'User_Name'] ])
           }
           }
           }
           stage('print the variables'){
           steps{
           echo "${Environment_Name}"
           echo "${User_Name}"
           *echo "${JENKINS_CREDS_USR}"*
           }
           }
           }
           }

          I have tested this code against the Jenkins version [ *2.222.1* and it runs without an error but fails when running in the version 2.204.5.|https://jenkins.io/]
          Liam Newman made changes -
          Description Original: I am using DSL for the Jenkins pipeline as code. This particular piece of code runs fine .


          {code:groovy}
          pipeline {
              agent

              {
                  label 'master'
              }

              stages {
                  stage('test script') {
                      steps {
                          script {
                              env.Environment_Name = input(id: 'Env', message: 'Select Environment',
                                  parameters: [[$class: 'ChoiceParameterDefinition', choices: 'test-1\ntest-2\ntest-3', description: '', name: '']])
                              println ".... $Environment_Name"
                              def allCreds = sh(returnStdout: true,
                                  script: "cat $JENKINS_HOME/jobs/$Environment_Name/config.xml | grep \"<id>\" | cut -d'>' -f2 | cut -d'<' -f1").trim().split('\n').join('\n')
                              println "----- $allCreds"
                              env.Cred_Name = input(id: 'Cred', message: 'Select Credential to Update',
                                  parameters: [[$class: 'ChoiceParameterDefinition', choices: allCreds, description: '', name: '']])
                              println "----- $Cred_Name"
                              env.User_Name = input(id: 'User_Name', message: 'Enter Username',
                                  parameters: [[$class: 'TextParameterDefinition', description: 'Username', name: 'User_Name']])
                          }
                      }
                  }
                  stage('print the variables') {
                      steps {
                          echo "${Environment_Name}"
                          echo "${User_Name}"
                      }
                  }
              }
          }
          {code}
           
          But when I add environment block to this code it fails with the following *exception java.lang.IndexOutOfBoundsException at hudson.MarkupText.rangeCheck(MarkupText.java:276)*

           

          pipeline {
           agent {
           label 'master'
           }
           *environment{*
           *JENKINS_CREDS = credentials('JENKINS_CREDS')*
           *}*
           stages {
           stage('test script') {
           steps {
           script {
           env.Environment_Name = input( id: 'Env', message: 'Select Environment', parameters: [ [$class: 'ChoiceParameterDefinition', choices: 'test-1\ntest-2\ntest-3', description: '', name: ''] ])
           println ".... $Environment_Name"
           
           def allCreds = sh(returnStdout: true, script: "cat $JENKINS_HOME/jobs/$Environment_Name/config.xml | grep \"<id>\" | cut -d'>' -f2 | cut -d'<' -f1").trim().split('\n').join('\n')
           println "----- $allCreds"
           
           env.Cred_Name = input( id: 'Cred', message: 'Select Credential to Update', parameters: [ [$class: 'ChoiceParameterDefinition', choices: allCreds, description: '', name: ''] ])
           println "----- $Cred_Name"
           
           env.User_Name = input(id: 'User_Name', message: 'Enter Username',parameters: [ [$class: 'TextParameterDefinition', description: 'Username', name: 'User_Name'] ])
           }
           }
           }
           stage('print the variables'){
           steps{
           echo "${Environment_Name}"
           echo "${User_Name}"
           *echo "${JENKINS_CREDS_USR}"*
           }
           }
           }
           }

          I have tested this code against the Jenkins version [ *2.222.1* and it runs without an error but fails when running in the version 2.204.5.|https://jenkins.io/]
          New: I am using DSL for the Jenkins pipeline as code. This particular piece of code runs fine .


          {code:groovy}
          pipeline {
              agent {
                  label 'master'
              }

              stages {
                  stage('test script') {
                      steps {
                          script {
                              env.Environment_Name = input(id: 'Env', message: 'Select Environment',
                                  parameters: [[$class: 'ChoiceParameterDefinition', choices: 'test-1\ntest-2\ntest-3', description: '', name: '']])
                              println ".... $Environment_Name"
                              def allCreds = sh(returnStdout: true,
                                  script: "cat $JENKINS_HOME/jobs/$Environment_Name/config.xml | grep \"<id>\" | cut -d'>' -f2 | cut -d'<' -f1").trim().split('\n').join('\n')
                              println "----- $allCreds"
                              env.Cred_Name = input(id: 'Cred', message: 'Select Credential to Update',
                                  parameters: [[$class: 'ChoiceParameterDefinition', choices: allCreds, description: '', name: '']])
                              println "----- $Cred_Name"
                              env.User_Name = input(id: 'User_Name', message: 'Enter Username',
                                  parameters: [[$class: 'TextParameterDefinition', description: 'Username', name: 'User_Name']])
                          }
                      }
                  }
                  stage('print the variables') {
                      steps {
                          echo "${Environment_Name}"
                          echo "${User_Name}"
                      }
                  }
              }
          }
          {code}
           
          But when I add environment block to this code it fails with the following *exception java.lang.IndexOutOfBoundsException at hudson.MarkupText.rangeCheck(MarkupText.java:276)*

          {code:groovy}
          pipeline {
              agent {
                  label 'master'
              }

              environment {
                  JENKINS_CREDS = credentials('JENKINS_CREDS')
              }

              stages {
                  stage('test script') {
                      steps {
                          script {
                              env.Environment_Name = input(id: 'Env', message: 'Select Environment',
                                  parameters: [[$class: 'ChoiceParameterDefinition', choices: 'test-1\ntest-2\ntest-3', description: '', name: '']])
                              println ".... $Environment_Name"
                              def allCreds = sh(returnStdout: true,
                                  script: "cat $JENKINS_HOME/jobs/$Environment_Name/config.xml | grep \"<id>\" | cut -d'>' -f2 | cut -d'<' -f1").trim().split('\n').join('\n')
                              println "----- $allCreds"
                              env.Cred_Name = input(id: 'Cred', message: 'Select Credential to Update',
                                  parameters: [[$class: 'ChoiceParameterDefinition', choices: allCreds, description: '', name: '']])
                              println "----- $Cred_Name"
                              env.User_Name = input(id: 'User_Name', message: 'Enter Username',
                                  parameters: [[$class: 'TextParameterDefinition', description: 'Username', name: 'User_Name']])
                          }
                      }
                  }
                  stage('print the variables') {
                      steps {
                          echo "${Environment_Name}"
                          echo "${User_Name}"
                          echo "${JENKINS_CREDS_USR}"
                      }
                  }
              }
          }
          {code} 

          I have tested this code against the Jenkins version [ *2.222.1* and it runs without an error but fails when running in the version 2.204.5.|https://jenkins.io/]

            Unassigned Unassigned
            anurag_30 Anurag Parchuri
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated: