Artifactory supports promoting Docker images from one Docker repository in Artifactory to another.
Promoting is useful when you need to move Docker images through different acceptance and testing stages, for example, from a development repository, through the different gateways all the way to production. Instead of rebuilding the image multiple times using promotion will ensure the image you will have in your production environment is the one built by your CI server and passed all the relevant tests.
Note
From Artifactory 7.117.1, when Docker image promotion overrides an existing image tag in the target repository, shared layers from other tags of the same image will not be deleted. In versions prior to 7.117.1, these shared layers may be deleted.
Starting from Artifactory version 7.94.1, retagging a docker image using docker promotion enforces tag validation according to the OCI specification by default. To avoid using tag validation, set the
artifactory.docker.filter.digests.from.tags.list.enabledparameter tofalsein your system configuration file.
Promotion can be triggered using the following endpoint with cURL:
POST /artifactory/api/docker/<repoKey>/v2/promote
{
"targetRepo" : "<targetRepo>",
"dockerRepository" : "<dockerRepository>",
"tag" : "<tag>",
"targetTag" : "<tag>",
"copy": <true | false>
}where:
Parameter | Description |
|---|---|
repoKey | Source repository key |
targetRepo | The target repository to move or copy |
dockerRepository | The docker repository name to promote |
tag | An optional tag name to promote, if null - the entire docker repository will be promoted. Default: |
targetTag | The new tag that the image should have after being promoted if you want to |
copy | When true, a copy of the image is promoted. When false, the image is moved to the target repository |
An example for promoting the docker image jfrog/ubuntu"] with all of its tags from docker-local to docker-prod using cURL would be:
curl -i -uadmin:password -X POST "https://artprod.company.com/api/docker/<repoKey>/v2/promote" -H "Content-Type: application/json" -d '{"targetRepo":"docker-prod","dockerRepository":"jfrog/ubuntu"}'https://artprod.company.com/api/docker/ <repoKey>/v2/promote
Notice that the above example is executed through your reverse proxy. To go directly through Artifactory, you would execute this command as follows:
curl -i -uadmin:password -X POST "http://localhost:8080/artifactory/api/docker/docker-local/v2/promote" -H "Content-Type: application/json" -d '{"targetRepo":"docker-prod","dockerRepository":"jfrog/ubuntu"}'The following example adds retagging with a specific version of the jfrog/ubuntu image (4.9.0) being retagged to latest as it gets promoted:
curl -i -uadmin:password -X POST "https://artprod.company.com/api/docker/docker-local/v2/promote" -H "Content-Type: application/json" -d '{"targetRepo":"docker-prod","dockerRepository":"jfrog/ubuntu", "tag" : "4.9.0", "targetTag" : "latest"}'