lumper
lumper copied to clipboard
Distributed building system for docker. Pull repo from the github by tag-webhook and queueing task for building by worker.
Lumper
Distributed building system for docker. Will pull repo from the github by tag-webhook and build it by Dockerfile.
Features
#. Distributed system. Any part might be working on different hosts. #. Email notifications (success and errors). #. Pushing into public or private docker registry. #. Building in queue. #. Emailing reports to administrator about exceptions. #. TLS client auth for docker daemon. #. SMTP authentication #. Building by webhook tag from github (You might be author of the extension for other services through pull-request ;-). #. Multiple installations (thanks to RMQ vhosts)
Requirements
- Python >=2.7 (>3.4 need testing).
- RabbitMQ server. Provide communication for components.
Parts
The system consists of 3 parts
- WEB Server. Based on tornado http server for accepting webhooks
- Worker. Building daemon listen AMQP
- Mailer. Mailing daemon. Provides notifying about build results.
Installation
#. Install Rabbitmq Server #. pip install lumper
Usage
The lumper provides one executable file lumper. You might run this with option --help (or -h)::
$ lumper --help
usage: lumper [-h] {server,worker,mailer} ...
positional arguments:
{server,worker,mailer}
server Run http backend
worker Run in worker mode
mailer Run as mailer delivery worker
optional arguments:
-h, --help show this help message and exit
Notice: exec "lumper <command> --help" for command options
Command line configuration ++++++++++++++++++++++++++
And you might see help about any modes. For web server::
$ lumper server --help
usage: lumper server [-h] [--config CONFIG] [--gen-config] [-a ADDRESS]
[-p PORT] [--secret COOKIE_SECRET] [--gzip] [--debug]
[--logging LOGGING] [--github-secret GITHUB_SECRET]
[-A RMQ_ADDRESS] [-P RMQ_PORT] [-H RMQ_VHOST]
[--user RMQ_USER] [--password RMQ_PASSWORD]
optional arguments:
-h, --help show this help message and exit
--config CONFIG Load configuration from file
--gen-config Create example of the config_file.json
Server options:
-a ADDRESS, --address ADDRESS
Listen this address
-p PORT, --port PORT Listen this port
--secret COOKIE_SECRET
Cookie secret
--gzip Gzip HTTP responses
--debug Debugging mode
--logging LOGGING Logging level
--github-secret GITHUB_SECRET
Github webhook's secret
-A RMQ_ADDRESS, --rmq-address RMQ_ADDRESS
RMQ host address
-P RMQ_PORT, --rmq-port RMQ_PORT
RMQ host port
-H RMQ_VHOST, --vhost RMQ_VHOST
RMQ virtual host
--user RMQ_USER RMQ virtual host
--password RMQ_PASSWORD
RMQ virtual host
For worker::
$ lumper worker --help
usage: lumper worker [-h] [--config CONFIG] [--gen-config] [--logging LOGGING]
[-a AMQP_ADDRESS] [-p AMQP_PORT] [-H AMQP_VHOST]
[-U AMQP_USER] [-P AMQP_PASSWORD]
[--docker-url DOCKER_URL] [--docker-tls]
[--docker-ca DOCKER_CA_CERT]
[--docker-cert DOCKER_CLIENT_CERT]
[--docker-key DOCKER_CLIENT_KEY] [--docker-tls-strict]
[--docker-registry DOCKER_REGISTRY]
[--docker-ssl-registry] [--docker-publish]
optional arguments:
-h, --help show this help message and exit
--config CONFIG Load configuration from file
--gen-config Create example of the config_file.json
Main options:
--logging LOGGING Logging level
RabbitMQ options:
-a AMQP_ADDRESS, --address AMQP_ADDRESS
RMQ host address
-p AMQP_PORT, --port AMQP_PORT
RMQ host port
-H AMQP_VHOST, --vhost AMQP_VHOST
RMQ virtual host
-U AMQP_USER, --user AMQP_USER
RMQ username
-P AMQP_PASSWORD, --password AMQP_PASSWORD
RMQ password
Docker options:
--docker-url DOCKER_URL
Docker daemon url ["unix:///var/run/docker.sock"]
--docker-tls Set when a docker daemon use TLS
--docker-ca DOCKER_CA_CERT
TLS certificate authority
--docker-cert DOCKER_CLIENT_CERT
TLS client certificate
--docker-key DOCKER_CLIENT_KEY
TLS client private key
--docker-tls-strict Strict verification server certificate
--docker-registry DOCKER_REGISTRY
Set if you have a private registry
--docker-ssl-registry
The private registry use ssl
--docker-publish Set if you want push images to registry
And for mailer::
$ lumper mailer --help
usage: lumper mailer [-h] [--config CONFIG] [--gen-config] [--logging LOGGING]
[-a AMQP_ADDRESS] [-p AMQP_PORT] [-H AMQP_VHOST]
[-U AMQP_USER] [-P AMQP_PASSWORD] [--smtp-host SMTP_HOST]
[--smtp-port SMTP_PORT] [--smtp-user SMTP_USER]
[--smtp-password SMTP_PASSWORD] [--smtp-tls]
[--smtp-sender SMTP_SENDER] [--mail-map MAIL_MAP]
[--admin-mail ADMIN_MAIL]
optional arguments:
-h, --help show this help message and exit
--config CONFIG Load configuration from file
--gen-config Create example of the config_file.json
Main options:
--logging LOGGING Logging level
RabbitMQ options:
-a AMQP_ADDRESS, --address AMQP_ADDRESS
RMQ host address
-p AMQP_PORT, --port AMQP_PORT
RMQ host port
-H AMQP_VHOST, --vhost AMQP_VHOST
RMQ virtual host
-U AMQP_USER, --user AMQP_USER
RMQ username
-P AMQP_PASSWORD, --password AMQP_PASSWORD
RMQ password
SMTP options:
--smtp-host SMTP_HOST
Server host
--smtp-port SMTP_PORT
Server port
--smtp-user SMTP_USER
Authentication username. Do auth if set.
--smtp-password SMTP_PASSWORD
Password.
--smtp-tls Use TLS.
--smtp-sender SMTP_SENDER
Sender of messages [default: lumper@localhost]
Delivery options:
--mail-map MAIL_MAP github user to E-mail map json file with hash.
--admin-mail ADMIN_MAIL
admin email for unknown users [default: root@localhost]
Config files ++++++++++++
You might generate and save configuration from the command line::
$ lumper mailer --gen-conf
{
"admin_mail": "root@localhost",
"amqp_address": "localhost",
"amqp_password": null,
"amqp_port": 5672,
"amqp_user": null,
"amqp_vhost": "/",
"logging": null,
"mail_map": null,
"smtp_host": "localhost",
"smtp_password": null,
"smtp_port": 25,
"smtp_sender": "lumper@localhost",
"smtp_tls": false,
"smtp_user": null
}
And load it with --config option. E.g lumper mailer --config /etc/lumper/mailer.json
And convert your command line to config-file::
$ lumper mailer --smtp-host mail.google.com --gen-conf
{
...
"smtp_host": "mail.google.com",
...
}
Notice: Option --gen-conf must be defined in the end.