On Wednesday, November 16, 2016 at 9:43:39 AM UTC-8, David Karr wrote:
>
> Using Jenkins 2.19.2 on Linux.
>
> I'm perplexed by the behavior of my Jenkinsfile, or at least what it's
> reporting to me. I had it basically working, but then I added some simple
> additional lines to gather some additional information, and now it somehow
> just stops executing the script at some point, without any explanation or
> stack trace.
>
> The following is the method called from a catch block in a stage where I
> first start to see a problem:
> @NonCPS
> def notifyFailure(String stageName) {
> println
> "result[${currentBuild.rawBuild.getPreviousBuild()?.getResult()}]"
> println "SUCCESS[${hudson.model.Result.SUCCESS}]"
> println "was.SUCCESS[${hudson.model.Result.SUCCESS ==
> currentBuild.rawBuild.getPreviousBuild()?.getResult()}]"
> try {
> println "About to call bFNMT."
> String body = buildFailureNotificationMessageText(stageName)
> println "Returned from bFNMT."
> println "body[${body}]"
> }
> catch (err) {
> err.printStackTrace()
> }
> try {
> String emailAddressesStr = getLastCommitsEmails()
> println "emailAddressesStr[${emailAddressesStr}]"
> }
> catch (err) {
> err.printStackTrace
> }
> def emailAddressesList = emailAddressesStr.split(",")
> println "emailAddressesList[${emailAddressesList}]"
> emailAddressesList.each { address -> println "address[${address}]" }
> def uidsList = emailAddressesList.collect { address -> address.split(
> "@")[0] }
> println "uidsList[${uidsList}]"
> sendQMessageToUsers(["dk068x"], body)
> emailext body:body.replaceAll('\\n', '<br>'),
> mimeType:'text/html',
> subject: 'BUILD FAILURE - ' + env.JOB_NAME,
> to: '[email protected]'
> }
>
> The following is the tail of the console output, starting at the first
> println in this method:
> result[FAILURE]
> [Pipeline] echo
> SUCCESS[SUCCESS]
> [Pipeline] echo
> was.SUCCESS[false]
> [Pipeline] echo
> About to call bFNMT.
> [Pipeline] echo
> In bFNMT.
> [Pipeline] echo
> job[unified-service-layer-build-pipeline] stageName[DEPLOY] bu[http:...]
> [Pipeline] echo
> In gLCT.
> [Pipeline] sh
> [workspace] Running shell script
> + git log -5 --date=short '--pretty=format:%cN: %cd : %s'
> [Pipeline] }
> [Pipeline] // stage
> [Pipeline] }
> [Pipeline] // node
> [Pipeline] End of Pipeline
> [DOSSIER] Response Code: 0
> [DOSSIER] Backup file created: /home/jenkins/...
> [DOSSIER] Seconds to input data: 0
> ERROR: script returned exit code 1
> Finished: FAILURE
>
> Here are the two other relevant methods that are called in this sequence:
> @NonCPS
> def buildFailureNotificationMessageText(String stageName) {
> println "In bFNMT."
> println "job[${env.JOB_NAME}] stageName[${stageName}]
> bu[${env.BUILD_URL}]"
> def result = "${env.JOB_NAME} <b><font
> color=\"red\">FAILED</font></b> (stage ${stageName}).\n" +
> "\n" +
> "Last commits:\n" +
> getLastCommitsText() + "\n" +
> "\n" +
> env.BUILD_URL
>
> println "At end of bFNMT."
> return result
> }
>
> @NonCPS
> def getLastCommitsText() {
> println "In gLCT."
> def result = sh(returnStdout:true, script:'git log -5 --date=short
> --pretty=format:"%cN: %cd : %s"')
> println "At end of gLCT."
> return result
> }
>
> If you look at the console output, you'll see it printed "In gLCT" and
> then it shows the "git log" command line. Then, it just seems to skip the
> rest of the flow and jump to the end of the stage and node.
>
> Also note that this is the "DEPLOY" stage. There was a "BUILD" stage
> before this, that executed similar methods. It also executed a method that
> executed a "git log" command line, and in the console output I saw the
> first "In ..." message, then the "Running shell script" message followed by
> the "+ git log ..." line, and then just like in the "DEPLOY" stage, it just
> skipped to the end of the stage. In this case, it went onto the "DEPLOY"
> stage, so this "skipping" behavior didn't cause a failure.
>
> I'm at a loss to understand what this is doing here.
>
I've determined that this behavior is caused by the "@NonCPS" annotation.
Once I removed them, this went back to behaving normally. I've read
explanations of what @NonCPS is for, and I still don't fully understand
it. I believe I read somewhere that "collection.each {}" doesn't work
properly without it, which is why I first started using it (although that
code is commented out right now). I guess I'll backtrack now and see if I
can get "each" working. If not, I'll use an old loop.
--
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/53508f4a-3e77-4bb5-add2-8975ef7ff7fc%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.