Files
fresh/README.md
T

95 lines
3.4 KiB
Markdown
Raw Normal View History

2022-03-07 22:45:54 +01:00
# Fresh: Keeping your docker stacks up to date
2022-03-09 00:38:57 +01:00
Fresh was written to scratch an itch. It works by querying the respective repositories
2022-03-19 23:22:08 +01:00
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.
2022-03-09 00:38:57 +01:00
2022-03-08 01:04:03 +01:00
## Building
2022-03-07 22:45:54 +01:00
2022-03-20 01:02:19 +01:00
Build using NoccyLabs Pharlite, included in the tools directory. Don't forget to run
composer to install dependencies first.
2022-03-07 22:45:54 +01:00
2022-03-20 01:02:19 +01:00
$ composer install
2022-03-10 02:32:47 +01:00
$ tools/pharlite
## Installing
Download the latest version (or build it yourself) and move it into `/usr/bin`.
2022-03-20 01:02:19 +01:00
You can grab it at [https://dev.noccylabs.info/noccy/fresh/releases](https://dev.noccylabs.info/noccy/fresh/releases).
2022-03-19 23:22:08 +01:00
2022-03-07 22:45:54 +01:00
## Usage
2022-03-09 00:38:57 +01:00
To check for updates, pull updated images and recreate any containers defined in the
`docker-compose.yml` in the current directory:
2022-03-07 22:45:54 +01:00
2022-03-10 02:32:47 +01:00
$ fresh.phar
2022-03-07 22:45:54 +01:00
2022-03-19 23:22:08 +01:00
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
2022-03-20 01:02:19 +01:00
Check a specific image:
$ fresh.phar --image my.private.repo/name/package:latest --check -w
$ echo $? # if 1, a newer version is available
2022-03-09 00:38:57 +01:00
For all available options, use the `--help` flag.
2022-03-07 22:45:54 +01:00
2022-03-09 00:38:57 +01:00
## Known Issues
2022-03-07 22:45:54 +01:00
2022-03-09 00:38:57 +01:00
- 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.
2022-03-10 02:32:47 +01:00
- **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.
2022-03-20 01:02:19 +01:00
- **How do I notify a Mattermost webhook?** Mattermost webhooks are compatible with
2022-03-19 23:22:08 +01:00
Slack webhooks, so simply use the `--slack` flag.
2022-03-09 00:38:57 +01:00
## 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.
2022-03-07 22:45:54 +01:00
2022-03-11 01:55:35 +01:00
**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-type`options.
2022-03-19 23:22:08 +01:00
**0.1.3**
- Added a `--before` script hook, to complement the `--after` hook.
- Hooks now invoked both before and after deploy.
2022-03-20 01:02:19 +01:00
## Thank you?
You can show your appreciation for the time and sweat you have saved through
Paypal.me: [https://paypal.me/noccy](paypal.me/noccy).