Fabkins, a femto-jenkins based on fabfiles

pip install fabkins==0.1.3



Femto-jenkins based on fabfiles.


  • simple, tiny and fast.
  • no database :
    • old build logs are in plain text.
    • job configurations are short json files.
    • fabfiles are actually just fabfiles. You could use them without fabkins.
  • builds can be triggered by hand or by web-hooks.
  • output of current builds can be visualized in "realtime" with websockets.


screenshot_1 screenshot_2


You need a UNIX server with python >= 2.6.

Install it in a virtualenv, please.

(venv) $ pip install fabkins
$ # if you've done that in a virtualenv, you should do that then:
$ # fabkins-patch-venv

Configuration and launch


(venv) $ fabkins -h
Usage: fabkins [OPTIONS]

Fabkins, a femto-jenkins based on fabfiles.

  -c, --config-file=STR   path of fabkins.ini
  --fabfile=STR           path of default fabfile.py template
  --workdir=STR           path of fabkins working directory (default: ~/workdir)
  --web-port=INT          listening http port (default: 8010)
  --web-prefix=STR        '/fabkins' if your instance is at example.com/fabkins(default: '/fabkins')
  --password=STR          the password used for log-in (sha256) (default: sha256 of "password")
  --webhook-key=STR       the password used to trigger web hooks (default: "th3w3bh00kk3y")
  -h, --help              Show this help

ProTip /!\ you should probably just use the "-c" option.
First, generate a "fabkins.ini" file -> "fabkins-gen-config -o ./fabkins.ini"
Edit it, and then launch fabkins -> "fabkins -c ./fabkins.ini"


(venv) $ fabkins-gen-config -o ~/fabkins.ini -p pass  # "pass" will be sha256summed
(venv) $ vim ~/fabkins.ini  # some edits
(venv) $ cat ~/fabkins.ini
workdir = /home/me/workdir
web-port = 8010
web-prefix = /fabkins
password = d74ff0ee8da3b9806b18c877dbf29bbde50b5bd8e4dad7a3a725000feb82e8f1
webhook-key = th3w3bh00kk3y


(venv) $ fabkins -c ~/fabkins.ini
# some output : it runs !

You can access the app at http://localhost:8010/fabkins, password = "pass".

Next steps : make nginx serve static content, and create an upstart job to control the service.


The security of this application relies only on UNIX basic rights. Someone who can log in the webapp can do everything the user that launched the service can do. So you should use a separate user for this service, with restricted rights, be the only one who knows the password, use HTTPS, and be confident.


  • gevent
  • gevent-websocket
  • Flask
  • Fabric
  • clize

See requirements.txt for more info about well working versions of these dependencies.


Although it seems to work fine, I'm not using thread-safe stuff, so it should break. So make backups. Do not use it for production / critical stuff.