Что такое JFrog Artifactory?

JFrog Artifactory — это универсальный менеджер артефактов и DevOps платформа, которая поддерживает все популярные форматы пакетов и технологии. Artifactory является центральным hub для управления бинарными артефактами на всех этапах жизненного цикла разработки.

Основные возможности JFrog Artifactory

  • Универсальность — поддержка 30+ форматов пакетов
  • High Availability — кластерная архитектура для высокой доступности
  • Security — сканирование уязвимостей и контроль доступа
  • Metadata — богатые метаданные и свойства артефактов
  • REST API — полнофункциональный API для автоматизации
  • Build Integration — интеграция с CI/CD инструментами

Когда использовать JFrog Artifactory

JFrog Artifactory идеально подходит для:

  • Крупных enterprise организаций с комплексными требованиями
  • Управления артефактами в multi-cloud средах
  • Обеспечения безопасности software supply chain
  • Централизованного управления всеми типами пакетов
  • Интеграции с JFrog Platform (Xray, Pipelines, Distribution)

Установка JFrog Artifactory

Установка через Docker Compose:

 1version: '3.8'
 2services:
 3  artifactory:
 4    image: docker.bintray.io/jfrog/artifactory-oss:latest
 5    container_name: artifactory
 6    ports:
 7      - "8081:8081"
 8      - "8082:8082"
 9    volumes:
10      - artifactory-data:/var/opt/jfrog/artifactory
11    environment:
12      - JF_SHARED_DATABASE_TYPE=postgresql
13      - JF_SHARED_DATABASE_URL=jdbc:postgresql://postgres:5432/artifactory
14      - JF_SHARED_DATABASE_USERNAME=artifactory
15      - JF_SHARED_DATABASE_PASSWORD=password
16    depends_on:
17      - postgres
18    restart: unless-stopped
19
20  postgres:
21    image: postgres:13
22    container_name: postgres
23    environment:
24      - POSTGRES_DB=artifactory
25      - POSTGRES_USER=artifactory
26      - POSTGRES_PASSWORD=password
27    volumes:
28      - postgres-data:/var/lib/postgresql/data
29    restart: unless-stopped
30
31volumes:
32  artifactory-data:
33  postgres-data:

Настройка репозиториев

Создание репозиториев через REST API:

 1# Создание Maven hosted репозитория
 2curl -u admin:password \
 3  -H "Content-Type: application/json" \
 4  -d '{
 5    "key": "maven-local",
 6    "rclass": "local",
 7    "packageType": "maven",
 8    "description": "Local Maven repository"
 9  }' \
10  "http://localhost:8081/artifactory/api/repositories/maven-local"
11
12# Создание Docker registry
13curl -u admin:password \
14  -H "Content-Type: application/json" \
15  -d '{
16    "key": "docker-local",
17    "rclass": "local",
18    "packageType": "docker",
19    "dockerApiVersion": "V2"
20  }' \
21  "http://localhost:8081/artifactory/api/repositories/docker-local"

Интеграция с Maven

Настройка settings.xml:

 1<?xml version="1.0" encoding="UTF-8"?>
 2<settings>
 3  <servers>
 4    <server>
 5      <id>central</id>
 6      <username>admin</username>
 7      <password>password</password>
 8    </server>
 9    <server>
10      <id>snapshots</id>
11      <username>admin</username>
12      <password>password</password>
13    </server>
14  </servers>
15  
16  <mirrors>
17    <mirror>
18      <id>central</id>
19      <name>libs-release</name>
20      <url>http://localhost:8081/artifactory/libs-release</url>
21      <mirrorOf>central</mirrorOf>
22    </mirror>
23    <mirror>
24      <id>snapshots</id>
25      <name>libs-snapshot</name>
26      <url>http://localhost:8081/artifactory/libs-snapshot</url>
27      <mirrorOf>snapshots</mirrorOf>
28    </mirror>
29  </mirrors>
30</settings>

Работа с Docker Registry

1# Логин в Artifactory Docker registry
2docker login artifactory.company.com:8082
3
4# Push образа
5docker tag nginx:latest artifactory.company.com:8082/docker-local/nginx:latest
6docker push artifactory.company.com:8082/docker-local/nginx:latest
7
8# Pull образа
9docker pull artifactory.company.com:8082/docker-local/nginx:latest

Build Info интеграция

Пример интеграции с Jenkins:

 1pipeline {
 2  agent any
 3  
 4  tools {
 5    maven 'Maven-3.8.1'
 6  }
 7  
 8  stages {
 9    stage('Build') {
10      steps {
11        rtMavenDeployer(
12          id: "MAVEN_DEPLOYER",
13          serverId: "artifactory-server",
14          releaseRepo: "libs-release-local",
15          snapshotRepo: "libs-snapshot-local"
16        )
17        
18        rtMavenResolver(
19          id: "MAVEN_RESOLVER",
20          serverId: "artifactory-server",
21          releaseRepo: "libs-release",
22          snapshotRepo: "libs-snapshot"
23        )
24        
25        rtMavenRun(
26          tool: "Maven-3.8.1",
27          pom: 'pom.xml',
28          goals: 'clean install',
29          deployerId: "MAVEN_DEPLOYER",
30          resolverId: "MAVEN_RESOLVER"
31        )
32      }
33    }
34    
35    stage('Publish Build Info') {
36      steps {
37        rtPublishBuildInfo(serverId: "artifactory-server")
38      }
39    }
40  }
41}

JFrog CLI использование

 1# Установка JFrog CLI
 2curl -fL https://getcli.jfrog.io | sh
 3
 4# Конфигурация сервера
 5jfrog rt config --url=http://localhost:8081/artifactory --user=admin --password=password
 6
 7# Загрузка артефактов
 8jfrog rt upload "target/*.jar" maven-local/com/example/my-app/1.0.0/
 9
10# Скачивание артефактов
11jfrog rt download maven-local/com/example/my-app/1.0.0/*.jar
12
13# Поиск артефактов
14jfrog rt search maven-local/com/example/*/

Настройка безопасности

Создание пользователей и групп:

 1# Создание группы
 2curl -u admin:password \
 3  -H "Content-Type: application/json" \
 4  -d '{
 5    "name": "developers",
 6    "description": "Developers group",
 7    "autoJoin": false
 8  }' \
 9  "http://localhost:8081/artifactory/api/security/groups/developers"
10
11# Создание пользователя
12curl -u admin:password \
13  -H "Content-Type: application/json" \
14  -d '{
15    "name": "developer1",
16    "email": "developer1@company.com",
17    "password": "password123",
18    "admin": false,
19    "groups": ["developers"]
20  }' \
21  "http://localhost:8081/artifactory/api/security/users/developer1"

Мониторинг и метрики

Artifactory предоставляет различные endpoints для мониторинга:

 1# System health
 2curl -u admin:password \
 3  "http://localhost:8081/artifactory/api/system/ping"
 4
 5# System info
 6curl -u admin:password \
 7  "http://localhost:8081/artifactory/api/system/info"
 8
 9# Storage info
10curl -u admin:password \
11  "http://localhost:8081/artifactory/api/storageinfo"

Репликация и федерация

Настройка репликации между инстансами:

 1# Создание репликации
 2curl -u admin:password \
 3  -H "Content-Type: application/json" \
 4  -d '{
 5    "url": "http://target-artifactory:8081/artifactory/maven-local",
 6    "username": "replication-user",
 7    "password": "password",
 8    "enabled": true,
 9    "cronExp": "0 0 12 * * ?"
10  }' \
11  "http://localhost:8081/artifactory/api/replications/maven-local"

Best Practices

  • Используй virtual репозитории для группировки related репозиториев
  • Настраивай retention policies для управления дисковым пространством
  • Включай Build Info для трассируемости артефактов
  • Используй properties для маркировки и фильтрации артефактов
  • Регулярно мониторь производительность и использование ресурсов

FAQ

Подходит ли JFrog Artifactory для продакшена?

Да, JFrog Artifactory является лидером в области управления артефактами и используется тысячами enterprise компаний по всему миру.

Какие требования к инфраструктуре?

Минимальные требования: 8 ГБ RAM, 4 CPU cores, 200 ГБ дискового пространства. Для production рекомендуется использовать внешнюю базу данных и кластерную архитектуру.

В чем разница между OSS и Pro версиями?

Pro версия включает High Availability, Smart Replications, REST API, Enterprise Support, интеграцию с JFrog Xray для security scanning.