Architecture
Server
Server exposes Kraken ReST API
UI
UI is an Angular application that can be served by NGINX. Unicorn can be used to maintain Server instances.
Controller
Controller is made of 4 services:
Planner- it triggers new flows based on indicated rule in given project's branchScheduler- it assigns jobs to agentsWatchdog- it checks runs and their jobs if they are in their time limits, it also monitors agents and their machines healthQNeck- it is a broker to RQ (see below) that filters out repeating the same requested background tasks
RQ
RQ executes background tasks like processing results reported by
an agent. Any service in Controller or RQ tasks can enqueue
new RQ tasks. Current tasks:
- analyze_results_history
- notify_about_completed_run
- trigger_stages
- job_completed
- trigger_run
- trigger_flow
ClickHouse & its Proxy
ClickHouse is a database that is used for storing logs from all
Kraken services and from all agents, ClickHouse Proxy is used to
collect logs, aggregate them and send in batches to ClickHouse
database.
MinIO
MinIO is an object storage database. It is used in Kraken to store
artifact that are created during jobs execution, to store cache files
and to store Git repository bundles.
Redis
Redis is used in various places:
- by
RQas its backend storage; - by Casbin (RBAC system) for synchronizing changes
- by Kraken CI Server for caching various data
- by Kraken CI QNeck as pubsub for passing tasks to
RQ
Agent
Agent is a service that is run on a machine that is expected to execute jobs. Agent can execute jobs directly on the system (locally), or it can encapulate them in e.g. container. Currently there are executors for:
- local
- Docker
- LXD