Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: sinatra
README.md

Jenkins Comments Build Status

Things you'll need

We'll pretend the following:

  • You have a Jenkins install at http://jenkins.mycompany.com
  • You have a GitHub organization called MyCompany
  • You have a GitHub account called MyCompany-bot
  • You have a repo you'd like pull requests on called FooBar

Initial setup

Clone the repo locally

git clone git@github.com:cramerdev/jenkins-comments.git
cd jenkins-comments 

Create a Heroku application

First we'll need a Heroku app running their Cedar stack, and a Redis server. We'll also set the url of our Jenkins server. Chose a name (we'll use "mycompany-jenkins-comments" for the example), and create it:

heroku create mycompany-jenkins-comments --stack cedar
git push heroku master

heroku addons:add redistogo:nano

heroku config:add JENKINS_URL=http://jenkins.mycompany.com
heroku config:add RACK_ENV=production

heroku ps:dynos 1

Setup your app with permissions for GitHub

Create a new Authorization using the GitHub Authorizations API:

curl -u "MyCompany-bot:password" https://api.github.com/authorizations \
  -H "Content-Type: application/json" \
  -X POST \
  -d '{"scopes":["repo"],"note": "mycompany-jenkins-comments.herokuapp.com"}'
{
  "scopes": [
    "repo"
  ],
  "updated_at": "2012-05-21T16:33:05Z",
  "note_url": null,
  "app": {
    "url": "http://developer.github.com/v3/oauth/#oauth-authorizations-api",
    "name": "mycompany-jenkins-comments.herokuapp.com (API)"
  },
  "url": "https://api.github.com/authorizations/369874",
  "token": "a55199221f3f66a7d238be5fa32e2cd84735ffc1",
  "note": "mycompany-jenkins-comments.herokuapp.com",
  "created_at": "2012-05-21T16:33:05Z",
  "id": 369874
}

In the reponse is the token the app will use to comment on pull requests. Add that token to Heroku:

heroku config:add GITHUB_USER_TOKEN=a55199221f3f66a7d238be5fa32e2cd84735ffc1

Per repo

Configure Jenkins Job

Under Build > Inject environemnt variables > Properties Content, set BUILD_STATUS to success. This will only be set if the build succeeds:

BUILD_STATUS=success

In Post-build Actions > Post build task > script, we'll add a curl statement to post the job status to mycompany-jenkins-comments.herokuapp.com:

curl "http://mycompany-jenkins-comments.herokuapp.com/jenkins/post_build\
?user=MyCompany\
&repo=FooBar\
&sha=$GIT_COMMIT\
&status=$BUILD_STATUS\
&job_name=FooBar%20Tests\
&job_number=$BUILD_NUMBER"

Configure GitHub to notify us of an opened pull request

We'll use the GitHub PubSubHubBub API to subscribe to pull requests events:

curl -u "MyCompany-bot:password" https://api.github.com/hub \
  -Fhub.mode=subscribe \
  -Fhub.topic=https://github.com/MyCompany/FooBar/events/pull_request \
  -Fhub.callback=http://mycompany-jenkins-comments.herokuapp.com/github/post_receive
Something went wrong with that request. Please try again.