Salt's Docker Bulkbuilds
Overview
This repo builds containers for a bunch of other peoples' repos that don't have their own builds but do have Dockerfiles.
Usage
See Setup for details on setting up the system. In short:
python3 -m venv venv
. venv/bin/activate
pip3 install -r requirements.txt
export [all that crap in Setup]
./bulkbuild.py repos.yml
Behavior
Given a registry user $USER
, every run of this script will do the following for each repo $REPO
defined in repos.yml
:
- Clone the head of the specified branch of the repository
cd
into it- For the head of the specified branch (and the ref in the latest tag
$TAG
ifrepo_build_tags
is true):- Check out that ref
$COMMIT_SHA
- For each container
$CONTAINER
to build from this repository:cd
into the relative path- Build the container using the specified Dockerfile
- Push the image as
$USER/$REPO-$CONTAINER:$COMMIT_SHA
- Push the image as
$USER/$REPO-$CONTAINER:bleeding
- If the ref is a tag
- Push the image as
$USER/$REPO-$CONTAINER:$TAG
- Push the image as
$USER/$REPO-$CONTAINER:latest
- Push the image as
- Check out that ref
Pretty straightforward, pretty intuitive. Every build updates :bleeding
, tags update :latest
.
Setup
Repos are defined in repos.yml
and read in via stdin
---
repository_name: # A friendly name for the repository, pick your poison
repo_url: "https://foo.bar/repo" # The path to the repository to git clone from
repo_branch: main # The branch to clone
repo_build_tags: true # Optional - If specified and true, build and push the
# latest tag from this repo. Defaults to false
containers: # A dict of containers you want built
container1: # Name of the first container
path: "container1" # The relative path in the repo where the Dockerfile
# for this lives
dockerfile: "Dockerfile-foo" # Optional - The name of the Dockerfile to use.
# Defaults to "Dockerfile"
container2: # Multiple containers can be built from one repo
path: "container2"
dockerfile: "Dockerfile-bar"
You will also need to set these envvars:
envvar | description |
---|---|
$CI_HUB_NAME |
The domain name (NOT the URL) of the container registry service you plan to use. Defaults to Docker Hub if not specified |
$CI_HUB_USERNAME |
Your username on the container registry service. Not to be confused with your login credentials |
$CI_HUB_LOGIN_NAME |
The username to use for logging into the registry |
$CI_HUB_LOGIN_PASSWORD |
The password to use for logging into the registry |
Description
Languages
Python
100%