Skip to content

Commit

Permalink
jenkins: post-build-status-update
Browse files Browse the repository at this point in the history
This creates a new `post-build-status-update` Jenkins Pipeline. It's job
is to propogate build information from Jenkins CI to the GitHub Bot to
GitHub. The pipeline created here will be called from node-test-commit-*
sub build jobs through the [Parameterized Trigger Plugin](https://wiki.jenkins.io/display/JENKINS/Parameterized+Trigger+Plugin).

The way this would be used is by creating pre and post build triggers
through the plugin, which would call this pipeline. My suggestion is
that we woll this out to one or two jobs (maybe the linter?), try it
out, and then after that roll it out to all sub builds.

Hopefully, this PR should finally fix the yellow CI statuses on GitHub!

Refs: nodejs#790
  • Loading branch information
maclover7 committed Nov 4, 2017
1 parent df77996 commit dd8290e
Showing 1 changed file with 50 additions and 0 deletions.
50 changes: 50 additions & 0 deletions jenkins/post-build-status-update.jenkinsfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/usr/bin/env groovy

import groovy.json.JsonOutput

pipeline {
agent { label 'jenkins-workspace' }

parameters {
string(defaultValue: '', description: 'test/aix, linter, etc.', name: 'IDENTIFIER')
string(defaultValue: '', description: 'pending, success, failure', name: 'STATUS')
string(defaultValue: '', description: 'URL for upstream Jenkins job', name: 'URL')
string(defaultValue: '', description: 'Current commit being tested in upstream Jenkins job', name: 'COMMIT')
string(defaultValue: '', description: 'Current branch being tested in upstream Jenkins job', name: 'REF')
}

stages {
stage('Send status report') {
steps {
sendBuildStatus(params.IDENTIFIER, params.STATUS, params.URL, params.COMMIT, params.REF)
}
}
}
}

def sendBuildStatus(identifier, status, url, commit, ref) {
def path = ""
def message = ""

if (status == "pending") {
path = "start"
message = "running tests"
} else if (status == "failure") {
path = "end"
message = "tests failed"
} else if (status == "success") {
path = "end"
message = "tests passed"
}

def buildPayload = JsonOutput.toJson([
'identifier': identifier,
'status': status,
'url': url,
'commit': commit,
'ref': ref,
'message': message
])

sh(returnStdout: true, script: "curl -s -o /dev/null --connect-timeout 5 -X POST -H 'Content-Type: application/json' -d '${buildPayload}' http://github-bot.nodejs.org:3333/node/jenkins/${path}")
}

0 comments on commit dd8290e

Please sign in to comment.