Search code examples
jenkinsjenkins-pipeline

Jenkins Declarative Pipeline: How to inject properties


I have Jenkins 2.19.4 with Pipeline: Declarative Agent API 1.0.1. How does one use readProperties if you cannot define a variable to assign properties read to?

For example, to capture SVN revision number, I currently capture it with following in Script style:

```

echo "SVN_REVISION=\$(svn info ${svnUrl}/projects | \
grep Revision | \
sed 's/Revision: //g')" > svnrev.txt

```

def svnProp = readProperties file: 'svnrev.txt'

Then I can access using:

${svnProp['SVN_REVISION']}

Since it is not legal to def svnProp in Declarative style, how is readProperties used?


Solution

  • You can use the script step inside the steps tag to run arbitrary pipeline code.

    So something in the lines of:

    pipeline {
        agent any
        stages {
            stage('A') {
                steps {
                    writeFile file: 'props.txt', text: 'foo=bar'
                    script {
                        def props = readProperties file:'props.txt';
                        env['foo'] = props['foo'];
                    }
                }
            }
            stage('B') {
                steps {
                    echo env.foo
                }
            }
        }
    }
    

    Here I'm using env to propagate the values between stages, but it might be possible to do other solutions.