a poor man's gitops
Find a file
2024-09-01 23:25:09 +02:00
lib chore: fix pylint complains 2024-06-10 12:09:05 +02:00
.gitignore refactor: move helper functions to separate module 2023-12-20 14:10:01 +01:00
config.yml.example feat: update example config file 2024-09-01 19:44:35 +02:00
dc-ops chore: fix pylint complains 2024-06-10 12:09:05 +02:00
README.md doc: add systemd timer and service example 2024-09-01 23:25:09 +02:00
requirements.txt feat: replace shell script with python implementation 2023-12-20 14:09:58 +01:00

Docker Compose GitOps (dc-ops)

dc-ops is a simple python script that automates the update and deployment of multiple Docker Compose applications.

How does it work?

It reads a list of git repositories from a YAML configuration file (config.yml), pulls the latest changes for each repo, and runs docker compose up for each specified docker-compose.yml file.

Features

  • Automatically checks for updates in git repositories
  • Supports multiple Docker Compose files per repository
  • Can be configured to skip certain repositories

Requirements

See requirements.txt

Usage

  1. Install the required Python packages: pip install -r requirements.txt
  2. Adapt config.yml.example to your needs and save it as config.yml
  3. Run dc-ops from the shell or from a cron job

Cron

Recommended crontab usage:

*/15 * * * * python3 /opt/dc-ops/dc-ops 2>&1 | ts "\%FT\%H:\%M:\%S" >>/var/log/dc-ops.log

(do not forget logrotate)

Systemd

Recommended systemd usage:

# /etc/systemd/system/dc-ops.service
[Unit]
Description=Run dc-ops once
After=docker.target

[Service]
Type=simple
WorkingDirectory=/opt/dc-ops/
ExecStart=python3 dc-ops
# /etc/systemd/system/dc-ops.timer
[Unit]
Description=Start dc-ops service periodically

[Timer]
Persistent=true
OnCalendar=*:0/15
Unit=dc-ops.service

[Install]
WantedBy=timers.target

Enable and start the timer:

systemctl enable dc-ops.timer
systemctl start dc-ops.timer

Parameters

See dc-ops --help

Configuration Options

  • stacks: an array containing details for each repository. Each element is a dictionary containing the following keys:
    • dir: the directory of the repository on your local machine.
    • compose-files: (optional) array of paths (relative to dir) to docker-compose files. Uses ["docker-compose.yml"] by default if not set.
    • enabled: (optional) false if this repository should be skipped. Defaults to true if not set.
    • pre: (optional) a command to be run before docker compose up, executed in dir.
    • post: (optional) a command to be run after docker compose up, executed in dir.
  • compose-opts: (optional) define additional parameters to docker compose up -d.
  • loglevel: (optional) define loglevel. Defaults to "INFO" if not set.
  • self-update: (optional) update this script on startup. Defaults to false.

Detailed process

For each enabled stack in the config file, the following process will be executed:

  1. Checking directory existence
  2. Fetching latest changes from remote repository
  3. If there is a new commit, it will pull the changes
  4. Running Docker Compose with the defined or default compose-file(s)