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