Load properties from a properties file and make it available anywhere in the pipeline

4,279 views
Skip to first unread message

ishan jain

unread,
May 2, 2017, 11:57:32 AM5/2/17
to Jenkins Users
Hi all,

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 code. 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 always pose error or print null. I have tried multiple combinations and the below code is just one of them

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}'
}
        }
    }
}



Robert Sandell

unread,
May 3, 2017, 6:24:02 AM5/3/17
to Jenkins Users
The File constructor is blacklisted so that users don't try to do the mistake that you are doing.
The pipeline code is running on the master (only the steps themselves are actually running on the agent), so when you create a new file pointing it to $workspace it is most likely not there on the master unless you are actually running on the master agent.
For these more advanced scenarios I created the Pipeline Utility Steps plugin that has among others a readProperties step.

/B

ishan jain

unread,
May 3, 2017, 8:38:23 AM5/3/17
to Jenkins Users
Thanks a lot Robert, that solved my problem. You are right, i should not whitelist those methods just load properties fille. Your plugin seems to be great, i will invest some time in learning other methods as well.

Also, do you think i can load the properties outside of a stage somehow ? I hate to have a separate stage for such preparation stuff.

Robert Sandell

unread,
May 3, 2017, 11:46:46 AM5/3/17
to jenkins...@googlegroups.com
I've gotten similar requests before to have some type of similar behavior/mode as readTrusted, so maybe it gets implemented sometime in the future.

/B

--
You received this message because you are subscribed to a topic in the Google Groups "Jenkins Users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/jenkinsci-users/8DJwV2laHCM/unsubscribe.
To unsubscribe from this group and all its topics, send an email to jenkinsci-users+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/f054f784-9126-406a-8de7-baabac9f6998%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.



--
Robert Sandell
Software Engineer
CloudBees Inc.
Reply all
Reply to author
Forward
0 new messages