mirror of
https://github.com/cupcakearmy/tumbo.git
synced 2024-12-22 08:16:26 +00:00
209 lines
3.8 KiB
Markdown
209 lines
3.8 KiB
Markdown
# tumbo
|
|
|
|
Docker matrix build generator.
|
|
|
|
The basic idea is that you combine a config file with custom variables with templating (Jinja2) and *__tumbo__* will run your matrix build in docker.
|
|
|
|
## 🤔 Motivation
|
|
|
|
I wanted a tool that allowed me to build/push/run similar docker images easily.
|
|
A basic example would be publishing a package on different version of python (e.g. 3.5-3.8) on different operating systems (maybe alpine and debian). With tumbo we can leverage the power of templating engines to automate this taks without needing to manually write 8 different Dockerfiles and run the commands for each manually.
|
|
|
|
## 📦 Install
|
|
|
|
```
|
|
pip install tumbo
|
|
```
|
|
|
|
## 🚀 Quickstart
|
|
|
|
###### spec.yml
|
|
|
|
```yaml
|
|
variables:
|
|
version:
|
|
- 3.11
|
|
- 3.10
|
|
- 3.9
|
|
name:
|
|
- Alice
|
|
- Bob
|
|
|
|
recipe: ./Dockerfile.j2
|
|
|
|
run: yes
|
|
parallel: no
|
|
```
|
|
|
|
###### Dockerfile.j2
|
|
|
|
```
|
|
FROM alpine:{{ version }}
|
|
|
|
CMD [ "echo", "Hi {{ name }} from {{ version }}" ]
|
|
```
|
|
|
|
And run
|
|
|
|
```sh
|
|
tumbo spec.yml
|
|
```
|
|
|
|
Tumbo will then generate 6 images, build and run them in all the combinations possible with the variables given.
|
|
|
|
## 🐣 [Examples](https://github.com/cupcakearmy/tumbo/tree/master/examples)
|
|
|
|
Have a look at the [examples folder]((https://github.com/cupcakearmy/tumbo/tree/master/examples)). I think it's the fastest way to learn.
|
|
|
|
To run the simple example
|
|
|
|
```
|
|
# Clone the repo
|
|
https://github.com/cupcakearmy/tumbo.git
|
|
cd tumbo
|
|
|
|
pip install tumbo
|
|
|
|
tumbo examples/simple/spec.yml
|
|
```
|
|
|
|
## 📘 Config Reference
|
|
|
|
### Variables
|
|
|
|
The variables to build the matrix. Simply specify an array for each variable. They will be available in the template.
|
|
|
|
```yaml
|
|
variables:
|
|
my_var:
|
|
- a
|
|
- b
|
|
- c
|
|
some_other:
|
|
- 0.1.0
|
|
- 0.1.2
|
|
```
|
|
|
|
### Recipe
|
|
|
|
The template to compile the dockerfile. Can be a template itself if you don't want to write everything in the same file.
|
|
|
|
###### Simple
|
|
|
|
```yaml
|
|
recipe: './Dockerfile.j2'
|
|
```
|
|
|
|
###### Template
|
|
|
|
```yaml
|
|
variables:
|
|
my_var:
|
|
- a
|
|
- b
|
|
|
|
recipe: './{{ my_var }}.j2'
|
|
```
|
|
|
|
Assuming `my_var` hast the values `a` and `b` it will render to `./a.j2` and `./b.j2` accordingly.
|
|
|
|
### Context (Optional)
|
|
|
|
**Default:** directory of the config file.
|
|
|
|
Specify the directory where the templates and the dockerfiles will be built.
|
|
Supports both absolute and relative paths.
|
|
|
|
```yaml
|
|
context: ./build
|
|
```
|
|
|
|
### Tag (Optional)
|
|
|
|
**Default:** Creates a tag that includes all variables.
|
|
In most cases it will not be necessary to specify, but can be usefull if your are pushing images. Supports templating of course.
|
|
|
|
**Important:** The tag should be unique across the matrix, otherwise you will overwrite other tags. So always include all the variables you specified inside the image name
|
|
|
|
```yaml
|
|
variables:
|
|
var1:
|
|
- a
|
|
- b
|
|
var2:
|
|
- a
|
|
- b
|
|
var3:
|
|
- a
|
|
- b
|
|
|
|
tag: 'my-image-name:{{ var3 }}-{{ var1 }}-{{ var2 }}'
|
|
```
|
|
|
|
### Parallel (Optional)
|
|
|
|
**Default:** yes
|
|
|
|
Whether the builds/push/runs should run in parallel or after each other.
|
|
|
|
###### no
|
|
|
|
Parallel off.
|
|
|
|
```yaml
|
|
parallel: no
|
|
```
|
|
|
|
|
|
###### yes
|
|
|
|
Uses all the threads available on the machine.
|
|
|
|
```yaml
|
|
parallel: yes
|
|
```
|
|
|
|
|
|
###### number
|
|
|
|
Uses how many thread you specify
|
|
|
|
```yaml
|
|
parallel: 2
|
|
```
|
|
|
|
### run (Optional)
|
|
|
|
**Default:** no
|
|
|
|
Wether to run the docker image after building. Can be usefull if running automated tests.
|
|
|
|
```yaml
|
|
run: yes
|
|
```
|
|
|
|
### push (Optional)
|
|
|
|
**Default:** no
|
|
|
|
Wether to push the docker image after building.
|
|
Can be used to push images to the docker registry (or your own).
|
|
See below on how to login.
|
|
|
|
```yaml
|
|
run: yes
|
|
```
|
|
|
|
### registry (Optional)
|
|
|
|
**Default:** Empty
|
|
|
|
Credentials for `docker login`. Used to push images and to specify a custom registry if necessary.
|
|
|
|
```yaml
|
|
registry:
|
|
username: my_user
|
|
password: my_pass
|
|
host: my_host
|
|
```
|