Git Product home page Git Product logo

janky's Introduction

Janky

This is Janky, a continuous integration server built on top of Jenkins, controlled by Hubot, and designed for GitHub.

  • Built on top of Jenkins. The power, vast amount of plugins and large community of the popular CI server all wrapped up in a great experience.

  • Controlled by Hubot. Day to day operations are exposed as simple Hubot commands that the whole team can use.

  • Designed for GitHub. Janky creates the appropriate web hooks for you and the web app restricts access to members of your GitHub organization.

Hubot Usage

Start by setting up a new Jenkins job and GitHub web hook for a repository:

hubot ci setup github/janky

The setup command can safely be run over and over again. It won't do anything unless it needs to. It takes an optional name argument:

hubot ci setup github/janky janky-ruby1.9.2

All branches are built automatically on push. Disable auto build with:

hubot ci toggle janky

Run the command again to re-enable it. Force a build of the master branch:

hubot ci build janky

Of a specific branch:

hubot ci build janky/libgit2

Different builds aren't relevant to the same Campfire room and so Janky lets you choose where notifications are sent to. First get a list of available rooms:

hubot ci rooms

Then pick one:

hubot ci set janky room The Serious Room

Get the status of a build:

hubot ci status janky

Specific branch:

hubot ci status janky/libgit2

All builds:

hubot ci status

Finally, get a quick reference of the available commands with:

hubot ci?

Installing

Jenkins

Janky requires access to a Jenkins server. Version 1.427 is recommended. Refer to the Jenkins documentation for installation instructions and install the Notification Plugin version 1.4.

Deploying

Janky is designed to be deployed to Heroku.

Grab all the necessary files from the gist:

$ git clone git://gist.github.com/1497335 janky

Then push up it to a new Heroku app:

$ cd janky
$ heroku create --stack cedar
$ git push heroku master

After configuring the app (see below), create the database:

$ heroku run rake db:migrate

Configuring

Janky is configured using environment variables. Use the heroku config command:

$ heroku config:add VARIABLE=value

Required settings:

  • JANKY_BASE_URL: The application URL with a trailing slash. Example: http://mf-doom-42.heroku.com/.
  • JANKY_BUILDER_DEFAULT: The Jenkins server URL with a trailing slash. Example: http://jenkins.example.com/.
  • JANKY_CONFIG_DIR: Directory where build config templates are stored. Typically set to /app/config on Heroku.
  • JANKY_HUBOT_USER: Login used to protect the Hubot API.
  • JANKY_HUBOT_PASSWORD: Password for the Hubot API.
  • JANKY_GITHUB_USER: The login of the GitHub user used to access the API. Requires Push and Pull privileges.
  • JANKY_GITHUB_PASSWORD: The password for the GitHub user.
  • JANKY_GITHUB_HOOK_SECRET: Secret used to sign hook requests from GitHub.
  • JANKY_CAMPFIRE_ACCOUNT: The name of your Campfire account.
  • JANKY_CAMPFIRE_TOKEN: The authentication token of the user sending build notifications.
  • JANKY_CAMPFIRE_DEFAULT_ROOM: The name of the room where notifications are sent by default. Example: "Builds".

To restrict access to members of a GitHub organization, register a new OAuth application on GitHub with the callback set to $JANKY_BASE_URL/auth/github/callback then set a few extra settings:

  • JANKY_SESSION_SECRET: Random session cookie secret. Typically generated by a tool like pgwen.
  • JANKY_AUTH_CLIENT_ID: The client ID of the OAuth application.
  • JANKY_AUTH_CLIENT_SECRET: The client secret of the OAuth application.
  • JANKY_AUTH_ORGANIZATION: The organization name. Example: "github".

Hubot

Install the janky script in your Hubot then set the HUBOT_JANKY_URL environment variable. Example: http://user:[email protected]/_hubot/, with user and password replaced by JANKY_HUBOT_USER and JANKY_HUBOT_PASSWORD repectively.

Custom Build Configuration

The default build command should suffice for most Ruby applications:

$ bundle install --path vendor/gems --binstubs
$ bundle exec rake

For more control you can add a script/cibuild at the root of your repository for Jenkins to execute instead.

For total control, whole Jenkins' config.xml files can be associated with Janky builds. Given a build called windows, Janky will try config/jobs/windows.xml.erb before falling back to the default configuration, config/jobs/default.xml.erb. After updating or adding a custom config, run hubot ci setup again to update the Jenkins server.

Hacking

Get your environment up and running:

$ script/boostrap

Create the databases:

$ mysqladmin -uroot create janky_development
$ mysqladmin -uroot create janky_test

Create the tables:

$ RACK_ENV=development bin/rake db:migrate
$ RACK_ENV=test bin/rake db:migrate

Seed some data into the development database:

$ bin/rake db:seed

Start the server:

$ script/server

Open the app:

$ open http://localhost:9393/

Run the test suite:

$ bin/rake

Contributing

Fork the Janky repository on GitHub and send a Pull Request.

Copying

Copyright © 2011, GitHub, Inc. See the COPYING file for license rights and limitations (MIT).

janky's People

Contributors

sr avatar atmos avatar tombell avatar holman avatar

Stargazers

David Busby avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.