[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-7920":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":16,"stars30d":16,"stars90d":15,"forks30d":15,"starsTrendScore":17,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":21,"defaultBranch":22,"hasWiki":20,"hasPages":20,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":27,"readmeContent":28,"aiSummary":29,"trendingCount":15,"starSnapshotCount":15,"syncStatus":30,"lastSyncTime":31,"discoverSource":32},7920,"janky","github\u002Fjanky","github","Continuous integration server built on top of Jenkins and Hubot","",null,"Ruby",2743,207,95,0,1,3,61.55,"MIT License",true,false,"master",[24,25,26],"hubot-script","jenkins","ruby","2026-06-12 04:00:36","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:\u002F\u002Fgithub.com\n[Hubot]: http:\u002F\u002Fhubot.github.com\n[Jenkins]: http:\u002F\u002Fjenkins-ci.org\n[w]: http:\u002F\u002Fdeveloper.github.com\u002Fv3\u002Frepos\u002Fhooks\u002F\n\nHubot usage\n-----------\n\nStart by setting up a new Jenkins job and GitHub web hook for a\nrepository: `[ORG]\u002F[REPO]`\n\n    hubot ci setup github\u002Fjanky\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]\u002F[REPO] [NAME]`\n\n    hubot ci setup github\u002Fjanky janky-ruby1.9.2\n\nIt also takes an optional `template` argument: `[ORG]\u002F[REPO] [NAME] [TEMPLATE]`\n\n    hubot ci setup github\u002Fjanky 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]\u002F[BRANCH]`\n\n    hubot ci build janky\u002Flibgit2\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]\u002F[BRANCH]`\n\n    hubot ci status janky\u002Flibgit2\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:\u002F\u002Fyour-jenkins-server.com\u002Fconfigure`.\nJanky will still trigger builds but will not update the build status without this set.\n\n[doc]: https:\u002F\u002Fwiki.jenkins-ci.org\u002Fdisplay\u002FJENKINS\u002FInstalling+Jenkins\n[np]: https:\u002F\u002Fwiki.jenkins-ci.org\u002Fdisplay\u002FJENKINS\u002FNotification+Plugin\n\n### Deploying\n\nJanky is designed to be deployed to [Heroku](https:\u002F\u002Fheroku.com).\n\nGrab all the necessary files from [the gist][gist]:\n\n    $ git clone git:\u002F\u002Fgist.github.com\u002F1497335 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:\u002F\u002Fgist.github.com\u002F1497335\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:\u002F\u002Fmf-doom-42.herokuapp.com\u002F`.\n* `JANKY_BUILDER_DEFAULT`: The Jenkins server URL **with** a trailing slash.\n   Example: `http:\u002F\u002Fjenkins.example.com\u002F`. For basic auth, include the\n   credentials in the URL: `http:\u002F\u002Fuser:pass@jenkins.example.com\u002F`.\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 `\u002Fapp\u002Fconfig` 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:\u002F\u002Fuser:password@host:port\u002Fdb_name`.\n* `JANKY_DATABASE_SOCKET`: Path to the database socket. Example:\n  `\u002Fvar\u002Frun\u002Fmysql5\u002Fmysqld.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:\u002F\u002Fgithub.example.com\u002Fapi\u002Fv3\u002F`.\n\n[ghe]: https:\u002F\u002Fenterprise.github.com\n\n### GitHub Status API\n\nhttps:\u002F\u002Fgithub.com\u002Fblog\u002F1227-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:\u002F\u002Fapi.github.com\u002Fauthorizations\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\u002FJabber 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\u002Fchat_service\u002Fhipchat\"` to the `config\u002Fenvironment.rb`\n  file **before** the `Janky.setup(ENV)` line.\n* `echo 'gem \"hipchat\", \"~>0.4\"' >> 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\u002Fchat_service\u002Fslack\"` to the `config\u002Fenvironment.rb`\n  file **before** the `Janky.setup(ENV)` line.\n* `echo 'gem \"slack.rb\"' >> Gemfile`\n* `bundle`\n* `git commit -am \"install slack\"`\n\n#### Hubot\n\nSends notifications to Hubot via [janky script](http:\u002F\u002Fgit.io\u002Fhubot-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\u002FHipChat: 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\u002Fchat_service\u002Fhubot\"` to the `config\u002Fenvironment.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:\u002F\u002Fgithub.com\u002Fsettings\u002Fapplications)\nwith the callback set to `$JANKY_BASE_URL\u002Fauth\u002Fgithub\u002Fcallback` 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:\u002F\u002Fgit.io\u002Fhubot-janky) in your Hubot\nthen set the `HUBOT_JANKY_URL` environment variable. Example:\n`http:\u002F\u002Fuser:password@janky.example.com\u002F_hubot\u002F`, 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\u002Fgems --binstubs\n    $ bundle exec rake\n\nFor more control you can add a `script\u002Fcibuild` 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\u002Fjobs\u002Fpsake.xml.erb` to use a template,\n`config\u002Fjobs\u002Fwindows.xml.erb` to try the job name if the template does\nnot exit,  before finally falling back to the default\nconfiguration, `config\u002Fjobs\u002Fdefault.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\u002Fbootstrap\n\nCreate the databases, tables, and seed data:\n\n    script\u002Fsetup\n\nStart the server:\n\n    docker-compose run --service-ports app script\u002Fserver\n\nOpen the app:\n\n    open http:\u002F\u002Flocalhost:9393\u002F\n\nRun the test suite:\n\n    docker-compose run --rm app script\u002Ftest\n\nContributing\n------------\n\nFork the [Janky repository on GitHub](https:\u002F\u002Fgithub.com\u002Fgithub\u002Fjanky) 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:\u002F\u002Fgithub.com\u002Fmattr-)\n\nCopying\n-------\n\nCopyright © 2011-2014, GitHub, Inc. See the `COPYING` file for license\nrights and limitations (MIT).\n","Janky 是一个基于 Jenkins 和 Hubot 构建的持续集成服务器，专为 GitHub 设计。它集成了 Jenkins 的强大功能和丰富的插件生态，并通过 Hubot 提供简洁的命令行接口，使得团队成员可以轻松执行日常操作。Janky 能够自动创建适用于 GitHub 仓库的 Webhook，并且限制只有组织成员才能访问相关构建。该项目适合需要与 GitHub 紧密结合、并希望通过聊天机器人简化 CI 操作的开发团队使用。尽管 Janky 不再维护，但其设计理念和技术实现仍对希望自定义 CI\u002FCD 流程的开发者具有参考价值。",2,"2026-06-11 03:15:05","top_language"]