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 [email protected].
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