Update docker stacks when newer images are available in the configured registries
Go to file
Chris 35f88303fa Improved hooks and scripts
* Invoke hooks before and after updating
* Scripts can now be run --before and --after
2022-03-19 23:22:08 +01:00
bin Bugfixes and improvements 2022-03-11 01:55:35 +01:00
src Improved hooks and scripts 2022-03-19 23:22:08 +01:00
tools Bugfixes, added tools 2022-03-10 02:27:25 +01:00
.gitignore Refactoring and cleanup 2022-03-09 01:09:28 +01:00
README.md Improved hooks and scripts 2022-03-19 23:22:08 +01:00
composer.json Initial commit 2022-03-07 22:45:54 +01:00

README.md

Fresh: Keeping your docker stacks up to date

Fresh was written to scratch an itch. It works by querying the respective repositories for the various manifests in order to determine if the images have been changed. If so it can do a combination of things:

  • Set the exitcode to indicate the freshness, 0 means up-to-date and 1 outdated.
  • Pull the updated images with docker-compose, and optionally recreate the containers with docker-compose up.
  • Run a script before and after updating, f.ex. to enable maintenance mode or update permission on volumes.
  • Notify webhooks when updating. Currently only Slack and Mattermost are supported.

Fresh is designed to be invoked using cron or systemd timers, and as such provides a light-weight easy-to-use alternative to more complex toolkits.

Building

Build using NoccyLabs Pharlite:

$ tools/pharlite

Installing

Download the latest version (or build it yourself) and move it into /usr/bin.

Go grab it at https://dev.noccylabs.info/noccy/fresh/releases

Usage

To check for updates, pull updated images and recreate any containers defined in the docker-compose.yml in the current directory:

$ fresh.phar 

Specify a directory to chdir into; very useful with cron:

$ fresh.phar --dir /srv/docker/mystack

To invoke scripts or webhooks:

$ fresh.phar --before scripts/sitedown.sh --after scripts/siteup.sh \
    --slack https://my.slack.or/mattermost/webhook

For all available options, use the --help flag.

Known Issues

  • There is currently no way to update the state when manually updating using the --check flag.
  • Only checks authenticated registries for new versions. But if you are using this you probably aren't using DockerHub anyway.

FAQ

  • How does Fresh remember the last seen hash? The container hashes are stored in the same directory as the docker-compose.yml file in a file named fresh.yml. Remove this file to force trigger an update.
  • What are these hashes? Fresh grabs the manifest for the image from the registry and proceeds to hash a concatenation of all the various build layer hashes. This should mean if the image is new but the layers are the same nothing will be updated.
  • How do I notify a Mattermost webook? Mattermost webhooks are compatible with Slack webhooks, so simply use the --slack flag.

Changes

0.1.1

  • Moved the logic from the entrypoint script to its own class.
  • Added locking (though fresh.lock lockfile) to prevent multiple instances.
  • Added --after hook to invoke script after update.
  • Disabled automatic flushing of the state to disk; --check will no longer update the state file, but --pull and default update will.

0.1.2

  • Fixed a bug in lockfile class preventing release of stale lockfile.
  • The --image option finally works.
  • Added a --write-state/-w option to write updated hashes to the state file.
  • Implemented --config and --config-typeoptions.

0.1.3

  • Added a --before script hook, to complement the --after hook.
  • Hooks now invoked both before and after deploy.