A simple-stupid self-hosted continuous integration service in >=Python3.4.
Kevin is a self-hostable CI daemon to build pull requests inside your VMs.
It was mainly developed for openage, but you can use it for any project!
Kevin can create doc files, bundle software, run tests, make screenshots, run any container/VM.
- Your kevin instance is notified by a github webhook.
- It spawns a temporary VM for the job.
- The repo is cloned and the build/test steps in
.kevin
are executed. - Progress can be viewed live via github,
curl
, websocket or website. - Results are instantly reported to github.
- Totally simple-stupid
- Configurability and customization
- Fast!
- Self-hostable.
The kevin
component interacts with the outside world.
You need a server for it.
kevin
contacts falk
to start a VM. You need a server for falk
again,
but it can be the same machine where kevin
is running on.
falk
launches virtual machines created by you.
You create the machine template (just set up a debian...) or use docker, etc.
Your job is then built inside that container by chantal
.
- Install
python >=3.4
tornado
requests
- Create user
kevin
- Add
kevin
to groupkvm
- Create
kevin.conf
fromkevin.conf.example
- Create a password-less SSH key with
ssh-keygen -t rsa -b 4096
- Install the
kevin
Python module (ideally, as a systemd unit or whatever)
-
Install
-
python >=3.4
-
your container system of choice: qemu, ...
-
If it's a different machine than the host
kevin
above: -
Create user
falk
-
Setup password-less SSH access (
ssh-copy-id
) for abovekevin
user tofalk@vmserver.name
-
Force ssh command to
command="python3 -m falk.shell useridentifier" ssh-rsa keyblabla...
-
Configure
kevin
in the[falk]
section: addfalk_name=falk@vmserver.name
-
If it's running on the same machine as
kevin
: -
Configure
kevin
in the[falk]
section: addfalk_name=userid@/run/kevin/falk
-
Create
falk.conf
fromfalk.conf.example
-
TODO/optional: create firewall rules to prevent the VM from talking to internals of your network
- Setup the OS, create user
chantal
- If your build process includes graphical stuff, setup some autologin stuff.
- You need
python >=3.4
,git
,ssh
,sudo
- It's convenient to have some VNC with e.g. qemu,
tigervnc
orx11vnc
- In
visudo
, giveNOPASSWD: ALL
permissions tochantal
- Setup password-less SSH access (
ssh-copy-id
) for abovekevin
user tochantal@guest
- Create control file
.kevin
in project root - Create GitHub webhook:
- Settings > Webhooks and Services > Add Webhook
- content type: JSON, URL:
http://your-host:webhook_port/hook-github