Ah just saw you need the job to call all builds even if one fails. You can 
do it with a parallel section like this:

Map buildResults = [:]

Boolean failedJobs = false

void nofify_email(Map results) {
    echo "TEST SIMULATE notify: ${results.toString()}"
}

Boolean buildJob(String jobName, Map results) {

    def jobBuild = build job: jobName, propagate: false

    def jobResult = jobBuild.getResult()

    echo "Build of '${jobName}' returned result: ${jobResult}"

    results[jobName] = jobResult

    return jobResult == 'SUCCESS'
}

pipeline {

    agent any

    stages {

        stage('Parallel Builds') {

            steps {

                parallel(

                        "testJob1": {
                            script {
                                if (!buildJob('testJob1', buildResults)) {
                                    failedJobs = true
                                }
                            }
                        },

                        "testJob2": {
                            script {
                                if (!buildJob('testJob2', buildResults)) {
                                    failedJobs = true
                                }
                            }
                        },
                )
            }
        }

        stage('Completion') {

            steps {
                script {
                    if (failedJobs) {
                        error("One or more jobs have failed")
                    }
                }
            }
        }
    }

    post {

        always {
            echo "Build results: ${buildResults.toString()}"
        }

        success {
            echo "All builds completed OK"
        }

        failure {
            echo "A job failed"

            script {
                nofify_email(buildResults)
            }
        }
    }
}



And output looks like this:

Started by user anonymous
[Pipeline] node
Running on master in /var/jenkins_home/workspace/foo
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Parallel Builds)
[Pipeline] parallel
[Pipeline] [testJob1] { (Branch: testJob1)
[Pipeline] [testJob2] { (Branch: testJob2)
[Pipeline] [testJob1] script
[Pipeline] [testJob1] {
[Pipeline] [testJob2] script
[Pipeline] [testJob2] {
[Pipeline] [testJob1] build (Building testJob1)
[testJob1] Scheduling project: testJob1
[Pipeline] [testJob2] build (Building testJob2)
[testJob2] Scheduling project: testJob2
[testJob1] Starting building: testJob1 #8
[testJob2] Starting building: testJob2 #4
[Pipeline] [testJob2] echo
[testJob2] Build of 'testJob2' returned result: SUCCESS
[Pipeline] [testJob2] }
[Pipeline] [testJob2] // script
[Pipeline] [testJob2] }
[testJob1] Build of 'testJob1' returned result: FAILURE
[Pipeline] [testJob1] echo
[Pipeline] [testJob1] }
[Pipeline] [testJob1] // script
[Pipeline] [testJob1] }
[Pipeline] // parallel
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Completion)
[Pipeline] script
[Pipeline] {
[Pipeline] error
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] echo
Build results: [testJob2:SUCCESS, testJob1:FAILURE]
[Pipeline] echo
A job failed
[Pipeline] script
[Pipeline] {
[Pipeline] echo
TEST SIMULATE notify: [testJob2:SUCCESS, testJob1:FAILURE]
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: One or more jobs have failed
Finished: FAILURE


--Bill

On Wednesday, 17 May 2017 03:45:27 UTC+1, Jesse Kinross-Smith wrote:
>
> How can I do this right - I want the results from a job I run (I need to 
> run a dozen of these in succession and will email devs if one of them 
> fails) 
>
> try{ BuildResults = build job: 'testJob'; currentBuild.result='SUCCESS'; } 
>> catch(e){ currentBuild.result = 'FAILURE'; } finally { 
>> notify_email(BuildResults); }
>
>
> if i do the above I only get a valid BuildResults in notify_email IF the 
> job is successful, 
> if it fails it causes an exception saying No such property: BuildResults
>
> currentBuild is useless as it's the pipeline results, not the job results 
> which is what I want
>
> I need the try/catch so I can continue to run my other jobs - otherwise 
> it'll stop immediately once one job fails
>
> I'm sure there's some syntax I'm missing here, but I'm struggling to find 
> it.
>
> Any help you can provide is appreciated.
>
> Regards,
>
> Jesse
>

-- 
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/8472bcdc-1c99-436a-91e7-00390111fb82%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to