title: Load properties from properties file and make them available throughout the job/pipeline - Jenkins declarative syntax
body: <p>My requirement is simple, i just want to externalize some 'values' to make my Jenkinsfile more re usable and for this i need to load the properties from a file which is going to be right next to Jenkinsfile, and make sure that these properties are available anywhere in the pipeline. I am still new to groovy and Jenkins code but never thought such a simple thing would be so difficult. I enabled some methods in script security plugin but the following code (and several variations i tried around it) always pose errors or print null or give me NPE. I have tried multiple combinations and the below code is just one of them.</p>
  
  <pre><code>properties = null
  
  @NonCPS
  def loadProperties() {
      checkout scm
      File propertiesFile = new File('${workspace}/pipeline.properties')
      propertiesFile.withInputStream {
              properties.load(propertiesFile)
      }
  }
  
  pipeline {
      agent none
  
      stages {
  
          stage ('prepare') {
              agent any
  
              steps {
                  script {
                  loadProperties()
                  echo "${properties['repo']}"
                  }
              }
          }
          stage('Build') {
  
              agent any
  
              steps {
                  sh 'echo ${properties.repo}'
              }
  
          }
      }
  }
  </code></pre>