{"id":13981073,"url":"https://github.com/github/janky","last_synced_at":"2025-10-05T14:31:19.360Z","repository":{"id":2073435,"uuid":"3012430","full_name":"github/janky","owner":"github","description":"Continuous integration server built on top of Jenkins and Hubot","archived":true,"fork":false,"pushed_at":"2022-04-04T14:51:58.000Z","size":619,"stargazers_count":2751,"open_issues_count":0,"forks_count":213,"subscribers_count":343,"default_branch":"master","last_synced_at":"2025-01-19T11:39:20.848Z","etag":null,"topics":["hubot-script","jenkins","ruby"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"globocom/IWantToWorkAtGloboCom","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/github.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES","contributing":".github/CONTRIBUTING.md","funding":null,"license":"COPYING","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-12-19T14:20:27.000Z","updated_at":"2025-01-02T05:01:48.000Z","dependencies_parsed_at":"2022-06-25T18:33:55.822Z","dependency_job_id":null,"html_url":"https://github.com/github/janky","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/github%2Fjanky","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/github%2Fjanky/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/github%2Fjanky/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/github%2Fjanky/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/github","download_url":"https://codeload.github.com/github/janky/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":235405233,"owners_count":18984868,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hubot-script","jenkins","ruby"],"created_at":"2024-08-09T04:01:58.192Z","updated_at":"2025-10-05T14:31:13.944Z","avatar_url":"https://github.com/github.png","language":"Ruby","readme":"Janky\n=====\n\n**As of April 2022, this repository is no longer used or maintained.**\n\n----\n\nThis is Janky, a continuous integration server built on top of\n[Jenkins][], controlled by [Hubot][], and designed for [GitHub][].\n\n* **Built on top of Jenkins.** The power, vast amount of plugins and large\n  community of the popular CI server all wrapped up in a great experience.\n\n* **Controlled by Hubot.** Day to day operations are exposed as simple\n  Hubot commands that the whole team can use.\n\n* **Designed for GitHub.** Janky creates the appropriate [web hooks][w] for\n  you and the web app restricts access to members of your GitHub organization.\n\n[GitHub]: https://github.com\n[Hubot]: http://hubot.github.com\n[Jenkins]: http://jenkins-ci.org\n[w]: http://developer.github.com/v3/repos/hooks/\n\nHubot usage\n-----------\n\nStart by setting up a new Jenkins job and GitHub web hook for a\nrepository: `[ORG]/[REPO]`\n\n    hubot ci setup github/janky\n\nThe `setup` command can safely be run over and over again. It won't do\nanything unless it needs to. It takes an optional `name` argument: `[ORG]/[REPO] [NAME]`\n\n    hubot ci setup github/janky janky-ruby1.9.2\n\nIt also takes an optional `template` argument: `[ORG]/[REPO] [NAME] [TEMPLATE]`\n\n    hubot ci setup github/janky janky-ruby1.9.2 ruby-build\n\nAll branches are built automatically on push. Disable auto build with:\n\n    hubot ci toggle [REPO]\n    \n**NOTE**: If `name` was set you'll need to use it intested.\n\n    hubot ci toggle [NAME]\n\nRun the command again to re-enable it. Force a build of the master\nbranch:\n\n    hubot ci build [REPO]\n    \n**NOTE**: If `name` was set you'll need to use it intested.\n\n    hubot ci build [NAME]\n\nOf a specific branch: `[REPO]/[BRANCH]`\n\n    hubot ci build janky/libgit2\n\nDifferent builds aren't relevant to the same chat room and so Janky\nlets you choose where notifications are sent to. First get a list of\navailable rooms:\n\n    hubot ci rooms\n    \nThen pick one:\n\n    hubot ci set room janky The Serious Room\n\nGet the status of a build:\n\n    hubot ci status janky\n\nSpecific branch: `[REPO]/[BRANCH]`\n\n    hubot ci status janky/libgit2\n\nAll builds:\n\n    hubot ci status\n\nFinally, get a quick reference of the available commands with:\n\n    hubot ci?\n\nInstalling\n----------\n\n### Jenkins\n\nJanky requires access to a Jenkins server. Version **1.580** is\nrecommended. Refer to the Jenkins [documentation][doc] for installation\ninstructions and install the [Notification Plugin][np] version 1.4.\n\nRemember to set the Jenkins URL in `http://your-jenkins-server.com/configure`.\nJanky will still trigger builds but will not update the build status without this set.\n\n[doc]: https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins\n[np]: https://wiki.jenkins-ci.org/display/JENKINS/Notification+Plugin\n\n### Deploying\n\nJanky is designed to be deployed to [Heroku](https://heroku.com).\n\nGrab all the necessary files from [the gist][gist]:\n\n    $ git clone git://gist.github.com/1497335 janky\n\nThen push it up to a new Heroku app:\n\n    $ cd janky\n    $ heroku create --stack cedar\n    $ bundle install\n    $ git add Gemfile.lock\n    $ git commit Gemfile.lock -m \"lock bundle\"\n    $ git push heroku master\n\nAfter configuring the app (see below), create the database:\n\n    $ heroku run rake db:migrate\n\n**NOTE:** Ruby version 2.0.0+ is required to run Janky.\n\n[gist]: https://gist.github.com/1497335\n\nUpgrading\n---------\n\nWe **strongly recommend** backing up your Janky database before upgrading.\n\nThe general process is to then upgrade the gem, and then run migrate.  Here is how\nyou do that on a local box you have access to (this process will differ for Heroku):\n\n    cd [PATH-TO-JANKY]\n    gem update janky\n    rake db:migrate\n\nConfiguring\n-----------\n\nJanky is configured using environment variables. Use the `heroku config`\ncommand:\n\n    $ heroku config:add VARIABLE=value\n\nRequired settings:\n\n* `JANKY_BASE_URL`: The application URL **with** a trailing slash. Example:\n  `http://mf-doom-42.herokuapp.com/`.\n* `JANKY_BUILDER_DEFAULT`: The Jenkins server URL **with** a trailing slash.\n   Example: `http://jenkins.example.com/`. For basic auth, include the\n   credentials in the URL: `http://user:pass@jenkins.example.com/`.\n   Using GitHub OAuth with Jenkins is not supported by Janky.\n* `JANKY_CONFIG_DIR`: Directory where build config templates are stored.\n  Typically set to `/app/config` on Heroku.\n* `JANKY_HUBOT_USER`: Login used to protect the Hubot API.\n* `JANKY_HUBOT_PASSWORD`: Password for the Hubot API.\n* `JANKY_GITHUB_USER`: The login of the GitHub user used to access the\n  API. Requires Administrative privileges to set up service hooks.\n* `JANKY_GITHUB_PASSWORD`: The password for the GitHub user.\n* `JANKY_GITHUB_HOOK_SECRET`: Secret used to sign hook requests from\n  GitHub.\n* `JANKY_CHAT_DEFAULT_ROOM`: Chat room where notifications are sent by default.\n\nOptional database settings:\n\n* `DATABASE_URL`: Database connection URL. Example:\n  `postgres://user:password@host:port/db_name`.\n* `JANKY_DATABASE_SOCKET`: Path to the database socket. Example:\n  `/var/run/mysql5/mysqld.sock`.\n\n### GitHub Enterprise\n\nUsing Janky with [GitHub Enterprise][ghe] requires one extra setting:\n\n* `JANKY_GITHUB_API_URL`: Full API URL of the instance, *with* a trailing\n  slash. Example: `https://github.example.com/api/v3/`.\n\n[ghe]: https://enterprise.github.com\n\n### GitHub Status API\n\nhttps://github.com/blog/1227-commit-status-api\n\nTo update pull requests with the build status generate an OAuth token\nvia the GitHub API:\n\n    curl -u username:password \\\n      -d '{ \"scopes\": [ \"repo:status\" ], \"note\": \"janky\" }' \\\n      https://api.github.com/authorizations\n\nthen set `JANKY_GITHUB_STATUS_TOKEN`.  Optionally, you can also set\n`JANKY_GITHUB_STATUS_CONTEXT` to send a context to the GitHub API by\ndefault\n\n`username` and `password` in the above example should be the same as the\nvalues provided for `JANKY_GITHUB_USER` and `JANKY_GITHUB_PASSWORD`\nrespectively.\n\n### Chat notifications\n\n#### HipChat\n\nRequired settings:\n\n* `JANKY_CHAT=hipchat`\n* `JANKY_CHAT_HIPCHAT_TOKEN`: authentication token (This token needs to be an\n  admin token, not a notification token.)\n* `JANKY_CHAT_HIPCHAT_FROM`: name that messages will appear be sent from.\n  Defaults to `CI`.\n* `JANKY_HUBOT_USER` should be XMPP/Jabber username in format xxxxx_xxxxxx\n  rather than email\n* `JANKY_CHAT_DEFAULT_ROOM` should be the name of the room instead of the\n  XMPP format, for example: `Engineers` instead of xxxx_xxxxxx.\n\nInstallation:\n\n* Add `require \"janky/chat_service/hipchat\"` to the `config/environment.rb`\n  file **before** the `Janky.setup(ENV)` line.\n* `echo 'gem \"hipchat\", \"~\u003e0.4\"' \u003e\u003e Gemfile`\n* `bundle`\n* `git commit -am \"install hipchat\"`\n\n#### Slack\n\nRequired settings:\n\n* `JANKY_CHAT=slack`\n* `JANKY_CHAT_SLACK_TEAM`: slack team name\n* `JANKY_CHAT_SLACK_TOKEN`: authentication token for the user sending build notifications.\n* `JANKY_CHAT_SLACK_USERNAME`: name that messages will appear be sent from.\n  Defaults to `CI`.\n* `JANKY_CHAT_SLACK_ICON_URL`: URL to an image to use as the icon for this message.\n\nInstallation:\n\n* Add `require \"janky/chat_service/slack\"` to the `config/environment.rb`\n  file **before** the `Janky.setup(ENV)` line.\n* `echo 'gem \"slack.rb\"' \u003e\u003e Gemfile`\n* `bundle`\n* `git commit -am \"install slack\"`\n\n#### Hubot\n\nSends notifications to Hubot via [janky script](http://git.io/hubot-janky).\n\nRequired settings:\n\n* `JANKY_CHAT=hubot`\n* `JANKY_CHAT_HUBOT_URL`: URL to your Hubot instance.\n* `JANKY_CHAT_HUBOT_ROOMS`: List of rooms which can be set via `ci set room`.\n  * For IRC: Comma-separated list of channels `\"#room, #another-room\"`\n  * For Campfire/HipChat: List with room id and name `\"34343:room, 23223:another-room\"`\n  * For Slack: List with room names `\"room, another-room\"`\n\nInstallation:\n* Add `require \"janky/chat_service/hubot\"` to the `config/environment.rb`\n  file **before** the `Janky.setup(ENV)` line.\n\n### Authentication\n\nTo restrict access to members of a GitHub organization, [register a new\nOAuth application on GitHub](https://github.com/settings/applications)\nwith the callback set to `$JANKY_BASE_URL/auth/github/callback` then set\na few extra settings:\n\n* `JANKY_SESSION_SECRET`: Random session cookie secret. Typically\n  generated by a tool like `pwgen`.\n* `JANKY_AUTH_CLIENT_ID`: The client ID of the OAuth application.\n* `JANKY_AUTH_CLIENT_SECRET`: The client secret of the OAuth application.\n* `JANKY_AUTH_ORGANIZATION`: The organization name. Example: \"github\".\n* `JANKY_AUTH_TEAM_ID`: An optional team ID to give auth to. Example: \"1234\".\n\n### Hubot\n\nInstall the [janky script](http://git.io/hubot-janky) in your Hubot\nthen set the `HUBOT_JANKY_URL` environment variable. Example:\n`http://user:password@janky.example.com/_hubot/`, with user and password\nreplaced by `JANKY_HUBOT_USER` and `JANKY_HUBOT_PASSWORD` respectively.\n\n### Custom build configuration\n\nThe default build command should suffice for most Ruby applications:\n\n    $ bundle install --path vendor/gems --binstubs\n    $ bundle exec rake\n\nFor more control you can add a `script/cibuild` at the root of your\nrepository for Jenkins to execute instead.\n\nFor total control, whole Jenkins' `config.xml` files can be associated\nwith Janky builds. Given a build called `windows` and a template name\nof `psake`, Janky will try `config/jobs/psake.xml.erb` to use a template,\n`config/jobs/windows.xml.erb` to try the job name if the template does\nnot exit,  before finally falling back to the default\nconfiguration, `config/jobs/default.xml.erb`. After updating or adding\na custom config, run `hubot ci setup` again to update the Jenkins\nserver.\n\nHacking\n-------\n\nDocker and docker-compose are required for hacking on this project.\n\nGet your environment up and running:\n\n    script/bootstrap\n\nCreate the databases, tables, and seed data:\n\n    script/setup\n\nStart the server:\n\n    docker-compose run --service-ports app script/server\n\nOpen the app:\n\n    open http://localhost:9393/\n\nRun the test suite:\n\n    docker-compose run --rm app script/test\n\nContributing\n------------\n\nFork the [Janky repository on GitHub](https://github.com/github/janky) and\nsend a Pull Request.  Note that any changes to behavior without tests will\nbe rejected.  If you are adding significant new features, please add both\ntests and documentation.\n\nMaintainers\n-----------\n\n* [@mattr-](https://github.com/mattr-)\n\nCopying\n-------\n\nCopyright © 2011-2014, GitHub, Inc. See the `COPYING` file for license\nrights and limitations (MIT).\n","funding_links":[],"categories":["Ruby"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgithub%2Fjanky","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgithub%2Fjanky","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgithub%2Fjanky/lists"}