I have the following script in by global cps library.

Cookbook.groovy:
package chef

Throwable exception = null

boolean validate() {

    validated = false

    try {
        sh 'validate'
        validated = true

    } catch (Throwable ex) {
        exception = ex
    }

    return (boolean)validated
}

boolean publish() {

    published = false
    try {
        sh 'publish'
        published = true
    } catch (Throwable ex) {
        exception = ex
    }
    return (boolean)published
}

def emailResults(Map args) {

    if (exception != null) {
        exceptionDetails = """<p>The job failed with the following 
error:</p>
<pre style=\"padding:7px;background-color:#E0E0E0;\">${exception.toString()}

${exception.getStackTrace().join('\n')}</pre>"""
    }

    mail to: args.to,
    subject: "Validation Job ${env['JOB_NAME']} ${subject}",
    mimeType: 'text/html',
    body: """<html><body>
    <p>The alidation job <strong>${env['JOB_NAME']}</strong> ${message}</p>
    <p>This job run is viewable on Jenkins at: </p>
    <p style=\"padding:10px\"><a 
href=\"${env['BUILD_URL']}\">${env['BUILD_URL']}</a></p>
    ${exceptionDetails}
<body></html>"""
}

def done() {

    if (exception != null) {
        echo """The job failed with the following error:
${exception.toString()}

${exception.getStackTrace().join('\n')}

"""
        throw exception
    }
}

This script fail on the if (exception != null) lines with 
a groovy.lang.MissingPropertyException: No such property: exception for 
class: chef.Cookbook when invoked from a job script similar to the 
following:

cookbook = new chef.Cookbook()
if(cookbook.validate()) {
    cookbook.publish()
}
cookbook.setEmail(to: 'm...@address.com')
cookbook.done()


The problem goes away and the code works as expected if I assign null to 
exception at the top of the validate function, like so:
boolean validate() {

    exception = null  // Must assign to this WITHIN a method, else 
accessing it within a method
                      // results in the an exception:
                      // groovy.lang.MissingPropertyException 

    validated = false  //signals that we are at least trying to validate

    ...

Experimenting around with things, I found that any *executable* code (vrs 
pure declarations) that I put outside of functions in such class files (eg. 
echo steps, throw new Exception('boom!') etc. do not seem to execute.  

If I put similar code in a regular groovy console I don't have this 
problem, it only seems to be in the CPS version of groovy, but I am no 
groovy expert, so I must ask, is this intended behavior and if so why, or 
should I file a bug for this?

-- 
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 jenkinsci-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-users/fb534476-168e-475c-8eed-b1063d9fed37%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to