I've read following documents regarding on serializing local variables:
https://github.com/jenkinsci/pipeline-plugin/blob/master/TUTORIAL.md#serializing-local-variables
After reading, I try to test my understanding with an hands-on example like
this:
pipeline {
agent {
node { label 'linux' }
}
stages {
stage('1') {
steps {
script {
def matcher = '123' =~ /^\d+$/
if (matcher.matches()) {
sh "echo \"it is a number!: ${matcher[0]}\""
}
}
}
}
}
}
If I understood correctly, one way to fix the issue here is to introduce a
method annotated with @NonCPS:
pipeline {
agent {
node { label 'linux' }
}
stages {
stage('1') {
steps {
script {
def number = tryGetNumber('123')
if (number) {
sh "echo \"it is a number!: ${number}\""
}
}
}
}
}
}
@NonCPS // commenting this line also works!?
def tryGetNumber(text) {
def matcher = text =~ /^\d+$/
if (matcher.matches()) {
return matcher[0]
}
return null
}
This last example code
*works without @NonCPS annotation*
I've tried similar other non-serializable-local-variable cases, but all
worked without @NonCPS annotation. Only introducing a method is suffice to
fix the issue.
I'm not sure if I misread the documents. When should @NonCPS be used? Is it
only for performance improvement? (so that non-necessary local variables
not written to disk)
--
You received this message because you are subscribed to the Google Groups
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/jenkinsci-users/cd3166a0-731d-477c-909c-28de7cdddc93n%40googlegroups.com.