Rules and cleanup policies for Artifactory
Project description
Artifactory cleanup
artifactory-cleanup
is a tool for cleaning artifacts in Jfrog Artifactory.
Tables of Contents
Installation
Upgrade/install to the newest available version:
python3 -mpip install artifactory-cleanup
# Directly from git
python3 -mpip install git+https://github.com/devopshq/artifactory-cleanup.git
# To be able to change files
git clone https://github.com/devopshq/artifactory-cleanup.git
cd artifactory-cleanup
python3 -mpip install -e .
Usage
Suppose you want to remove all artifacts older than N days from 'reponame'. You should take the following steps:
- Install
artifactory-cleanup
- Сreate a python file, for example,
reponame.py
with the following contents:
from artifactory_cleanup import rules
from artifactory_cleanup import CleanupPolicy
RULES = [
# ------ ALL REPOS --------
CleanupPolicy(
'Delete files older than 30 days',
rules.Repo('reponame'),
rules.DeleteOlderThan(days=30),
),
]
- Run the command to SHOW (not remove) artifacts that will be deleted:
artifactory-cleanup --user user --password password --artifactory-server https://repo.example.com/artifactory --config reponame.py
- Add
--destroy
flag to REMOVE artifacts
artifactory-cleanup --destroy --user user --password password --artifactory-server https://repo.example.com/artifactory --config reponame.py
Commands
# Debug
# debug run - only print founded artifacts. it do not delete
artifactory-cleanup --user user --password password --artifactory-server https://repo.example.com/artifactory --config reponame.py
# Debug run only for policytestname. Find any *policytestname*
# debug run - only print founded artifacts. it do not delete
artifactory-cleanup --policy-name policytestname --user user --password password --artifactory-server https://repo.example.com/artifactory --config reponame.py
# REMOVE
# For remove artifacts use --destroy
artifactory-cleanup --destroy --user user --password password --artifactory-server https://repo.example.com/artifactory --config reponame.py
Available Rules
All rules are imported from the rules
module.
See also List of available cleaning rules
Artifact cleanup policies
To add a cleaning policy you need:
- Create a python file, for example,
reponame.py
.artifacroty-cleanup
imports the variableRULES
, so you can make a python package. - Add a cleanup rule from the available cleanup rules.
from artifactory_cleanup import rules
from artifactory_cleanup import CleanupPolicy
RULES = [
CleanupPolicy(
'Delete all * .tmp repositories older than 7 days',
rules.RepoByMask('*. tmp'),
rules.DeleteOlderThan(days=7),
),
CleanupPolicy(
'Delete all images older than 30 days from docker-registry exclude latest, release',
rules.Repo('docker-registry'),
rules.ExcludeDockerImages(['*:latest', '*:release*']),
rules.DeleteDockerImagesNotUsed(days=30),
),
]
Docker Container Usage
The below command assumes you to have your rules configuration file rules.py
in the current working directory.
To run the container use the following command:
# Dry mode - log artifacts that will be removed
docker run \
--mount type=bind,source=./rules.py,target=/tmp/rules.py \
-e ARTIFACTORY_USER=<username> \
-e ARTIFACTORY_PASSWORD=<password> \
-e ARTIFACTORY_URL=<artifactory url> \
-e ARTIFACTORY_RULES_CONFIG=/tmp/rules.py \
devopshq/artifactory-cleanup:latest
# Destroy mode - remove artifacts
docker run \
--mount type=bind,source=./rules.py,target=/tmp/rules.py \
-e ARTIFACTORY_USER=<username> \
-e ARTIFACTORY_PASSWORD=<password> \
-e ARTIFACTORY_URL=<artifactory url> \
-e ARTIFACTORY_RULES_CONFIG=/tmp/rules.py \
-e ARTIFACTORY_DESTROY_MODE_ENABLED="true" \
devopshq/artifactory-cleanup:latest
The environment variables specify the necessary artifactory-cleanup
arguments.
In case you have set up your Artifactory self-signed certificates, place all certificates of the chain of trust into the docker/certificates/
folder and add an additional argument --mount type=bind,source=./certificates/,target=/mnt/self-signed-certs/
to a command.
To build the container image locally run the following command in the folder of the Dockerfile
.
docker build . --tag artifactory-cleanup
FAQ
How to clean up Conan repository?
The idea came from https://github.com/devopshq/artifactory-cleanup/issues/47
from artifactory_cleanup import rules
from artifactory_cleanup import CleanupPolicy
RULES = [
# ------ ALL REPOS --------
CleanupPolicy(
'Delete files older than 60 days',
rules.repo('conan-testing'),
rules.delete_not_used_since(days=60),
# Make sure to keep conan metadata. See also
# https://github.com/devopshq/artifactory-cleanup/issues/47
rules.exclude_filename(['.timestamp', 'index.json']),
),
CleanupPolicy(
'Delete empty folders',
rules.repo('conan-testing'),
rules.delete_empty_folder(),
# Exclude metadata files
# If a folder only contains these files, consider it as empty
rules.exclude_filename(['.timestamp', 'index.json']),
),
]
Release
In order to provide a new release of artifactory-cleanup
, there are two steps involved.
- Bump the version in the setup.py
- Create a Git release tag (e.g.
v0.3.3
) by creating a release on Github
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for artifactory-cleanup-0.4.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 791fafea35ab10d4951b43f5d837770d633353c6fff375a11b114089c03ca47c |
|
MD5 | 94d8ab1ac7a452c32697f6c1470a7099 |
|
BLAKE2b-256 | 192b815c6befba044f3318e73d672667a6dde3dd4bd0880acc01da76518dc777 |
Hashes for artifactory_cleanup-0.4.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d3ab237e109d9e26a18e52199fad39774253653536ea8a36f1608f60a52065f3 |
|
MD5 | 9243f5638d95ca12ca744de9d8f0e1b0 |
|
BLAKE2b-256 | 080085f259d6f5a08fb52ddc9ee914fc326fca217ce4790f7b079e2bc1f46b3f |