I'm trying to create a Jenkins pipeline step that should only run for certain Gerrit projects. In particular, for all projects where the variable GERRIT_PROJECT starts with "platform/zap". Sadly, I suffer from a lack of skills in Groovy.
This is what I got so far:
stage ('zap') {
        when {
            expression {
                isMatch = env.GERRIT_PROJECT =~ /^platform\/zap/
                return isMatch
            }
        }
        steps {
            build job: 'Zap', parameters: [
                string(name: 'ZAP_PROJECT', value: env.GERRIT_PROJECT)
            ]
        }
    }
In other words, the stage should be executed for "platform/zap/os" but not for "app/hello".
Any guidance would be greatly appreciated.
You can use String.startsWith(str) that returns true if env.GERRIT_PROJECT starts with platform/zap.
stage ('zap') {
    when {
        expression {
            env.GERRIT_PROJECT?.startsWith("platform/zap")
        }
    }
    steps {
        build job: 'Zap', parameters: [
            string(name: 'ZAP_PROJECT', value: env.GERRIT_PROJECT)
        ]
    }
}
To avoid NPE if env.GERRIT_PROJECT is null for some reason, you can use NPE-safe operator ?. to invoke startsWith method.
The alternative solution that uses Groovy's exact match operator with regex could look like this:
stage ('zap') {
    when {
        expression {
            env.GERRIT_PROJECT ==~ /^platform\/zap(.*)$/
        }
    }
    steps {
        build job: 'Zap', parameters: [
            string(name: 'ZAP_PROJECT', value: env.GERRIT_PROJECT)
        ]
    }
}
https://jenkins.io/doc/book/pipeline/syntax/
Section environment:
environment
Execute the stage when the specified environment variable is set to the given value, for example: when { environment name: 'DEPLOY_TO', value: 'production' }
Maybe this can help?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With