Using Artifactory as binary cache server¶
It is possible to use Artifactory as a binary cache server.
Start and prepare¶
As an example it will be shown how to start Artifactory on local machine from Docker.
Pull and start docker image, forward port 8081:
> docker run -it -p 8081:8081 docker.bintray.io/jfrog/artifactory-oss bash
Open URL http://localhost:8081 in browser and use default login
admin/password to enter.
We will use key-based access to binaries without any anonymous reads so
let’s remove default permission. Go to Admin -> Permissions:
And remove everything:
Create Local repository:
And choose type Generic:
Name it hunter and click Save & Finish:
Next let’s create user reader who will have Read access and
user writer who will have Deploy/Cache access.
Click Add User:
Enter reader name and password, click Save :
Login as reader, go to Profile and generate API Key:
Save this key, further it will be referenced as artifactory_reader_key.
Do the same for writer user, writer’s key will be referenced
as artifactory_writer_key.
Login as admin to give permissions for users:
Name it Hunter access and add hunter to repositories:
Go to Users tab and add reader/writer. Give
reader access of type Read. Give writer user access or type
Deploy/Cache:
Note
In real example you will create account with upload access that can do
both Read and Deploy/Cache.
CMake code¶
Set HUNTER_CACHE_SERVERS
variable before HunterGate to configure Hunter to use Artifactory server:
cmake_minimum_required(VERSION 3.2)
set(
HUNTER_CACHE_SERVERS
"http://localhost:8081/artifactory/hunter"
CACHE
STRING
"Default cache server"
)
option(HUNTER_RUN_UPLOAD "Upload cache binaries" ON)
set(
HUNTER_PASSWORDS_PATH
"${CMAKE_CURRENT_LIST_DIR}/cmake/Hunter/passwords.cmake"
CACHE
FILEPATH
"Hunter passwords"
)
include(cmake/HunterGate.cmake)
HunterGate(URL "..." SHA1 "...")
project(foo)
hunter_add_package(PNG)
Artifactory keys can be set by HTTPHEADER in
Hunter passwords file:
set(artifactory_reader_key "...")
set(artifactory_writer_key "...")
set(server "http://localhost:8081/artifactory/hunter")
hunter_cache_server_password(
SERVER "${server}"
HTTPHEADER "X-JFrog-Art-Api: ${artifactory_reader_key}"
SUB_SHA1_SUFFIX
)
hunter_upload_password(
SERVER "${server}"
HTTPHEADER "X-JFrog-Art-Api: ${artifactory_writer_key}"
SUB_SHA1_SUFFIX
)
Note
Artifactory treats URLs like
https://my.server.com/.../file.txt.sha1 as a special URL to get SHA1 hash
of file https://my.server.com/.../file.txt. Use SUB_SHA1_SUFFIX
to download all internal Hunter cache meta files of form abc.sha1
by using abc_sha1 URL.
Note
http://localhost:8081 repeated 3 times, that may looks redundant
but in general HUNTER_CACHE_SERVERS is a list, hence there may be
several different servers used. For each server there may be one
hunter_cache_server_password(SERVER ...) command. Server
from hunter_upload_password may not be in HUNTER_CACHE_SERVERS list
at all, though it might not make a lot of sense.
Run CMake build. After build finished update page and check the state of
hunter repository:
Effectively it’s the same as local Cache layout.