Rewrite to account for numerical sorting
Signed-off-by: Michael Bridgen <michael@weave.works>
This commit is contained in:
committed by
Hidde Beydals
parent
daaae07649
commit
e785971ba8
@@ -45,7 +45,7 @@ consider. These are dealt with in detail below.
|
|||||||
|
|
||||||
Selecting an image by build time is no longer supported. This is the implicit default in Flux v1. In
|
Selecting an image by build time is no longer supported. This is the implicit default in Flux v1. In
|
||||||
Flux v2, you will need to tag images so that they sort in the order you would like -- [see
|
Flux v2, you will need to tag images so that they sort in the order you would like -- [see
|
||||||
below](#how-to-use-timestamps-in-image-tags) for how to do this conveniently.
|
below](#how-to-use-sortable-image-tags) for how to do this conveniently.
|
||||||
|
|
||||||
#### Fields to update are explicitly marked
|
#### Fields to update are explicitly marked
|
||||||
|
|
||||||
@@ -494,14 +494,14 @@ These are the prefixes supported in Flux v1, and what to use in Flux v2:
|
|||||||
|
|
||||||
| Flux v1 prefix | Meaning | Flux v2 equivalent |
|
| Flux v1 prefix | Meaning | Flux v2 equivalent |
|
||||||
|----------------|---------|--------------------|
|
|----------------|---------|--------------------|
|
||||||
| `glob:` | Filter for tags matching the glob pattern, then select the newest by build time | [Use timestamped tags](#how-to-use-timestamps-in-image-tags) |
|
| `glob:` | Filter for tags matching the glob pattern, then select the newest by build time | [Use sortable tags](#how-to-use-sortable-image-tags) |
|
||||||
| `regex:` | Filter for tags matching the regular expression, then select the newest by build time |[Use timestamped tags](#how-to-use-timestamp-in-image-tags) |
|
| `regex:` | Filter for tags matching the regular expression, then select the newest by build time |[Use sortable tags](#how-to-use-sortable-image-tags) |
|
||||||
| `semver:` | Filter for tags that represent versions, and select the highest version in the given range | [Use semver ordering](#how-to-use-semver-image-tags) |
|
| `semver:` | Filter for tags that represent versions, and select the highest version in the given range | [Use semver ordering](#how-to-use-semver-image-tags) |
|
||||||
|
|
||||||
#### How to use timestamps in image tags
|
#### How to use sortable image tags
|
||||||
|
|
||||||
To give image tags a useful ordering, you can use a timestamp as part of each image's tag, then sort
|
To give image tags a useful ordering, you can use a timestamp or serial number as part of each
|
||||||
alphabetically.
|
image's tag, then sort either alphabetically or numerically.
|
||||||
|
|
||||||
This is a change from Flux v1, in which the build time was fetched from each image's config, and
|
This is a change from Flux v1, in which the build time was fetched from each image's config, and
|
||||||
didn't need to be included in the image tag. Therefore, this is likely to require a change to your
|
didn't need to be included in the image tag. Therefore, this is likely to require a change to your
|
||||||
|
|||||||
@@ -6,36 +6,54 @@ the container config for each image, and fetching that is subject to strict rate
|
|||||||
registries (e.g., by [DockerHub][dockerhub-rates]).
|
registries (e.g., by [DockerHub][dockerhub-rates]).
|
||||||
|
|
||||||
This guide explains how to construct image tags so that the most recent image has the tag that comes
|
This guide explains how to construct image tags so that the most recent image has the tag that comes
|
||||||
last in alphabetical order. The technique suggested is to put a timestamp or serial number in each
|
last in alphabetical or numerical order. The technique suggested is to put a timestamp or serial
|
||||||
image tag.
|
number in each image tag.
|
||||||
|
|
||||||
## Formats and alternatives
|
## Formats and alternatives
|
||||||
|
|
||||||
The important properties for sorting alphabetically are that the parts of the timestamp go from most
|
The important properties for sorting are that the parts of the timestamp go from most significant to
|
||||||
significant to least (e.g., the year down to the second), and that the output is always the same
|
least (e.g., the year down to the second). For numbers it is best to use numerical order, since this
|
||||||
number of characters.
|
will work with values of different width (e.g., '12' sorts after '2').
|
||||||
|
|
||||||
Image tags are often shown in user interfaces, so readability matters. Here are some alternatives:
|
Image tags are often shown in user interfaces, so readability matters. Here is an example of a
|
||||||
|
readable timestamp that will sort well:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ # seconds-since-epoch (used in the example above)
|
|
||||||
$ date +%s
|
|
||||||
1611840548
|
|
||||||
$ # date and time (remember ':' is not allowed in a tag)
|
$ # date and time (remember ':' is not allowed in a tag)
|
||||||
$ date +%F.%H%M%S
|
$ date +%F.%H%M%S
|
||||||
2021-01-28.133158
|
2021-01-28.133158
|
||||||
```
|
```
|
||||||
|
|
||||||
Alternatively, you can use a stable serial number as part of the tag. Some CI platforms will
|
You can use a timestamp that sorts as a number, like [Unix
|
||||||
provide a build number in an environment variable, but that may not be reliable to use as a serial
|
time](https://en.wikipedia.org/wiki/Unix_time):
|
||||||
number -- check the platform documentation.
|
|
||||||
|
```
|
||||||
|
$ # seconds since Jan 1 1970
|
||||||
|
$ date +%s
|
||||||
|
1611840548
|
||||||
|
```
|
||||||
|
|
||||||
|
Alternatively, you can use a serial number as part of the tag. Some CI platforms will provide a
|
||||||
|
build number in an environment variable, but that may not be reliable to use as a serial number --
|
||||||
|
check the platform documentation.
|
||||||
|
|
||||||
|
A commit count can be a reasonable stand-in for a serial number, if you build an image per commit
|
||||||
|
and you don't rewrite the branch in question:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ # commits in branch
|
||||||
|
$ git --rev-list --count HEAD
|
||||||
|
1504
|
||||||
|
```
|
||||||
|
|
||||||
|
Beware: this will not give a useful number if you have a shallow clone.
|
||||||
|
|
||||||
### Other things to include in the image tag
|
### Other things to include in the image tag
|
||||||
|
|
||||||
It is also handy to quickly trace an image to the branch and commit of its source code. Including
|
It is also handy to quickly trace an image to the branch and commit of its source code. Including
|
||||||
the branch also means you can filter for images from a particular branch.
|
the branch also means you can filter for images from a particular branch.
|
||||||
|
|
||||||
In sum, a useful tag format is
|
A useful tag format is
|
||||||
|
|
||||||
<branch>-<sha1>-<timestamp>
|
<branch>-<sha1>-<timestamp>
|
||||||
|
|
||||||
@@ -109,7 +127,7 @@ spec:
|
|||||||
pattern: '^main-[a-f0-9]+-(?P<ts>[0-9]+)'
|
pattern: '^main-[a-f0-9]+-(?P<ts>[0-9]+)'
|
||||||
extract: '$ts'
|
extract: '$ts'
|
||||||
policy:
|
policy:
|
||||||
alphabetical:
|
numerical:
|
||||||
order: asc
|
order: asc
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -128,7 +146,7 @@ spec:
|
|||||||
pattern: '^.+-[a-f0-9]+-(?P<ts>[0-9]+)'
|
pattern: '^.+-[a-f0-9]+-(?P<ts>[0-9]+)'
|
||||||
extract: '$ts'
|
extract: '$ts'
|
||||||
policy:
|
policy:
|
||||||
alphabetical:
|
numerical:
|
||||||
order: asc
|
order: asc
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user