Aller au contenu principal

Introduction à Artifactory de Jfrog

Dans une démarche DevOps, la gestion des artefacts est essentielle pour assurer une intégration et une livraison continues réussies. JFrog Artifactory se présente comme une solution pour relever ce défi.

Artifactory se distingue par sa capacité à supporter une multitude de formats de packages, son intégration transparente avec les outils de CI/CD et ses fonctionnalités avancées de gestion des dépôts et de sécurité. Que vous travailliez avec Java, Docker, npm ou tout autre technologie, Artifactory s'adapte à vos besoins, rendant la gestion des dépendances et des artefacts une tâche gérable et efficace.

Historique de JFrog Artifactory

Pour comprendre pleinement la valeur et les capacités de JFrog Artifactory, il est essentiel de connaître son évolution historique. Artifactory a été lancé en 2006, à une époque où la gestion des artefacts et des dépendances commençait à devenir un défi majeur dans le monde du développement logiciel.

À ses débuts, Artifactory était l'une des premières solutions à se concentrer spécifiquement sur la gestion des artefacts binaires. C'était une réponse directe à la nécessité croissante d'une gestion plus structurée des dépendances dans les cycles de développement, notamment pour les projets Java utilisant Maven. La vision était claire : simplifier la gestion des artefacts pour améliorer l'efficacité des processus de développement et de livraison.

Au fil des années, Artifactory a évolué pour devenir bien plus qu'un simple gestionnaire de dépôts Maven. Il s'est adapté pour supporter un large éventail de formats de packages, y compris Docker, npm, NuGet... répondant ainsi aux besoins changeants des développeurs et des équipes DevOps. Cette évolution a coïncidé avec la montée en puissance de l'intégration et de la livraison continues (CI/CD), plaçant Artifactory au cœur de nombreux pipelines de CI/CD.

JFrog, l'entreprise derrière Artifactory, a continuellement innové et étendu ses offres. Avec l'introduction de fonctionnalités telles que la réplication de dépôts, l'intégration CI/CD et la gestion avancée de la sécurité, Artifactory est devenu une solution complète pour la gestion d'artefacts. L'entreprise a également introduit des versions Pro et Enterprise, offrant des fonctionnalités supplémentaires pour répondre aux exigences des grandes organisations.

Aujourd'hui, JFrog Artifactory est reconnu comme un outil essentiel dans l'écosystème DevOps, utilisé par des milliers d'entreprises à travers le monde. Sa capacité à s'adapter aux évolutions technologiques et à répondre aux besoins complexes des équipes de développement moderne en fait un choix privilégié pour la gestion d'artefacts.

Fonctionnalités Clés de JFrog Artifactory

JFrog Artifactory est une solution complète pour la gestion d'artefacts, conçue pour répondre aux exigences variées des environnements de développement modernes. Voici un aperçu détaillé de ses principales fonctionnalités :

  • Support Multi Techno : Artifactory prend en charge une large gamme de formats de gestion de packages, y compris Maven, Gradle, npm, Docker et bien d'autres, offrant une solution centralisée pour tous types d'artefacts.
  • Dépôts Hybrides : Il permet de gérer à la fois des dépôts locaux (hébergés internement), des dépôts distants (pour proxy des dépôts externes) et des dépôts virtuels (agrégation de plusieurs dépôts).
  • Interface Web Intuitive : Une interface utilisateur graphique conviviale pour gérer les dépôts, les utilisateurs et les permissions.
  • API REST Complète : Une API REST pour automatiser et intégrer Artifactory avec d'autres systèmes et outils.
  • Automatisation des Builds : Artifactory s'intègre étroitement avec divers outils de CI/CD comme Jenkins, GitLab CI/CD et CircleCI pour automatiser la création, le stockage et la gestion des artefacts.
  • Traçabilité des Builds : Il fournit une traçabilité complète des artefacts, en conservant des métadonnées détaillées pour chaque build.
  • Contrôles d'Accès Fins : Artifactory permet une gestion fine des droits d'accès, avec la possibilité de définir des permissions détaillées au niveau des utilisateurs et des groupes.
  • Authentification et Intégration SSO : Supporte l'authentification LDAP/Active Directory, OAuth et SAML pour une intégration transparente avec les systèmes d'authentification existants.
  • Architecture Haute Disponibilité : La version Enterprise supporte une configuration haute disponibilité avec un clustering et un équilibrage de charge.
  • Réplication Globale : Permet la réplication des dépôts entre différentes instances d'Artifactory, facilitant ainsi la collaboration et la distribution à l'échelle mondiale.
  • Recherche et Gestion Avancées : Offre des outils de recherche puissants et des API REST pour une gestion programmable des artefacts.
  • Nettoyage et Gestion du Stockage : Fonctionnalités pour gérer l'espace de stockage, y compris le nettoyage des artefacts anciens ou inutilisés.
  • JFrog Xray : Integration avec JFrog Xray pour une analyse en profondeur des vulnérabilités et des licences dans les artefacts et les images Docker.
  • JFrog Pipelines : Permet d'orchestrer des pipelines de déploiement automatisés et de distribution de logiciels.

Installation de Jfrog Artifactory

Je vous propose un tutoriel permettant d'installer de manière simplifié Jfrog Artifactory. Pour cela je vais utiliser vagrant :

Vagrant.configure("2") do |config|
  config.vm.box = "generic/alma8"
  config.vm.provider "libvirt" do |lv|
    lv.cpus = "4"
    lv.memory = "4096"
  end
  config.vm.synced_folder '.', '/vagrant', disabled: true

  config.vm.define "artifactory" do |artifactory|
    artifactory.vm.network :private_network, ip: "192.168.3.10"
    artifactory.vm.hostname = "artifactory"
  end
end

Allez on lance la VM

vagrant up
vagrant ssh

On passe à l'installation...

Installation des pré-requis

Installation de PostgreSQL

Avant d'installer JFrog Artifactory, il est important d'installer une base de données. PostgreSQL 15 est une excellente option pour cela. Voici comment l'installer sur AlmaLinux 8 :

Tout d'abord, ajoutez le dépôt officiel de PostgreSQL :

sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

AlmaLinux 8 - BaseOS                                                  3.3 MB/s | 4.0 MB     00:01
AlmaLinux 8 - AppStream                                                11 MB/s |  11 MB     00:01
AlmaLinux 8 - Extras                                                   44 kB/s |  20 kB     00:00
Extra Packages for Enterprise Linux 8 - x86_64                         12 MB/s |  16 MB     00:01
pgdg-redhat-repo-latest.noarch.rpm                                     15 kB/s |  13 kB     00:00
Dependencies resolved.
======================================================================================================
 Package                     Architecture      Version                  Repository               Size
======================================================================================================
Installing:
 pgdg-redhat-repo            noarch            42.0-35PGDG              @commandline             13 k

Transaction Summary
======================================================================================================
Install  1 Package

Total size: 13 k
Installed size: 15 k
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                              1/1
  Installing       : pgdg-redhat-repo-42.0-35PGDG.noarch                                          1/1
  Verifying        : pgdg-redhat-repo-42.0-35PGDG.noarch                                          1/1

Installed:
  pgdg-redhat-repo-42.0-35PGDG.noarch

On désactive le module intégré :

sudo dnf -qy module disable postgresql
Importing GPG key 0x442DF0F8:
...
 Userid     : "PostgreSQL RPM Building Project <pgsql-pkg-yum@postgresql.org>"
 Fingerprint: 68C9 E2B9 1A37 D136 FE74 D176 1F16 D2E1 442D F0F8
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG

Installez ensuite PostgreSQL 15 :

sudo dnf install -y postgresql15-server postgresql15-contrib
Last metadata expiration check: 0:01:28 ago on Wed Dec 20 13:27:45 2023.
Dependencies resolved.
======================================================================================================
 Package                        Architecture      Version                     Repository         Size
======================================================================================================
Installing:
 postgresql15-server            x86_64            15.5-2PGDG.rhel8            pgdg15            6.0 M
Installing dependencies:
 libicu                         x86_64            60.3-2.el8_1                baseos            8.8 M
 lz4                            x86_64            1.8.3-3.el8_4               baseos            102 k
 postgresql15                   x86_64            15.5-2PGDG.rhel8            pgdg15            1.6 M
 postgresql15-libs              x86_64            15.5-2PGDG.rhel8            pgdg15            294 k

...

Installed:
  libicu-60.3-2.el8_1.x86_64                         lz4-1.8.3-3.el8_4.x86_64
  postgresql15-15.5-2PGDG.rhel8.x86_64               postgresql15-libs-15.5-2PGDG.rhel8.x86_64
  postgresql15-server-15.5-2PGDG.rhel8.x86_64

Après l'installation, initialisez la base de données :

sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
Initializing database ... OK

Activez et démarrez le service PostgreSQL :

sudo systemctl enable postgresql-15
Created symlink /etc/systemd/system/multi-user.target.wants/postgresql-15.service → /usr/lib/systemd/s

Configuration de la BDD

Editez le fichier suivant :

sudo vi /var/lib/pgsql/15/data/pg_hba.conf

Ajoutez la ligne suivante à la fin du fichier :

host  artifactory       artifactory     127.0.0.1/32            md5

Création de l'utilisateur et de la BDD Artifactory :

sudo su - postgres
psql

CREATE USER artifactory WITH PASSWORD 'password';
CREATE DATABASE artifactory WITH OWNER=artifactory ENCODING='UTF8';
GRANT ALL PRIVILEGES ON DATABASE artifactory TO artifactory;
CREATE EXTENSION pg_trgm;

Voilà qui clôture l'installation de la BDD. Déconnectez-vous de l'utilisateur Postgres.

Installation de Java

Passons à l'installation de Java :


sudo dnf update
sudo dnf install java-17-openjdk

Installation d'Artifactory

wget https://releases.jfrog.io/artifactory/artifactory-pro-rpms/artifactory-pro-rpms.repo -O jfrog-artifactory-pro-rpms.repo
sudo mv jfrog-artifactory-pro-rpms.repo /etc/yum.repos.d/
sudo dnf update -y
sudo dnf install jfrog-artifactory-pro -y

Configuration d'Artifactory

Nous allons indiquer à Artifactory d'utiliser la base donnée créée précédemment. Pour cela, éditez le fichier suivant :

sudo vi /var/opt/jfrog/artifactory/etc/system.yaml

Dans la section database mettre ces valeurs :

    ## Example for postgresql
    type: postgresql
    driver: org.postgresql.Driver
    url: "jdbc:postgresql://localhost:5432/artifactory"
    username: artifactory
    password: password

On crée les clés :

sudo -i
cd /var/opt/jfrog/artifactory
openssl rand -hex 16 > etc/security/master.key
chown artifactory.artifactory etc/security/master.key
chmod 600 etc/security/master.key

openssl rand -hex 16 > etc/security/join.key
chown artifactory.artifactory etc/security/join.key
chmod 600 etc/security/join.key
exit

On démarre Artifactory :

sudo systemctl enable artifactory.service
sudo systemctl start artifactory.service

sudo systemctl status artifactory.service
● artifactory.service - Artifactory service
   Loaded: loaded (/usr/lib/systemd/system/artifactory.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
[root@artifactory /]# systemctl start artifactory.service
[root@artifactory /]# systemctl status artifactory.service
● artifactory.service - Artifactory service
   Loaded: loaded (/usr/lib/systemd/system/artifactory.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2023-12-20 13:47:10 UTC; 10s ago
  Process: 8069 ExecStart=/opt/jfrog/artifactory/app/bin/artifactoryManage.sh start (code=exited, sta>
 Main PID: 11768 (java)
    Tasks: 0 (limit: 23144)
   Memory: 103.9M
   CGroup: /system.slice/artifactory.service
           ‣ 11768 /opt/jfrog/artifactory/app/third-party/java/bin/java -Djava.util.logging.config.fi>
Dec 20 13:47:09 artifactory su[12928]: (to artifactory) root on none
Dec 20 13:47:10 artifactory su[12928]: pam_unix(su:session): session opened for user artifactory by (>
Dec 20 13:47:10 artifactory su[12928]: pam_unix(su:session): session closed for user artifactory
Dec 20 13:47:10 artifactory systemd[1]: Started Artifactory service.

Tout semble fonctionnel.

Un petit contrôle :

netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:8035          0.0.0.0:*               LISTEN      12795/jf-connect
tcp        0      0 127.0.0.1:8036          0.0.0.0:*               LISTEN      12661/jf-observabil
tcp        0      0 127.0.0.1:8070          0.0.0.0:*               LISTEN      12542/node
tcp        0      0 127.0.0.1:8071          0.0.0.0:*               LISTEN      12926/jf-integratio
tcp        0      0 127.0.0.1:8072          0.0.0.0:*               LISTEN      12926/jf-integratio
tcp        0      0 127.0.0.1:8046          0.0.0.0:*               LISTEN      12231/jf-router
tcp        0      0 127.0.0.1:8047          0.0.0.0:*               LISTEN      12231/jf-router
tcp        0      0 127.0.0.1:8049          0.0.0.0:*               LISTEN      12231/jf-router
tcp        0      0 127.0.0.1:8086          0.0.0.0:*               LISTEN      12405/jf-metadata
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      813/sshd
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      7989/postmaster
tcp        0      0 127.0.0.1:8061          0.0.0.0:*               LISTEN      13048/jf-event
tcp        0      0 127.0.0.1:8062          0.0.0.0:*               LISTEN      13048/jf-event
tcp        0      0 127.0.0.1:8030          0.0.0.0:*               LISTEN      12795/jf-connect
tcp6       0      0 127.0.0.1:8040          :::*                    LISTEN      11768/java
tcp6       0      0 :::8045                 :::*                    LISTEN      11768/java
tcp6       0      0 127.0.0.1:8015          :::*                    LISTEN      11768/java
tcp6       0      0 :::8081                 :::*                    LISTEN      11768/java
tcp6       0      0 :::8082                 :::*                    LISTEN      12231/jf-router
tcp6       0      0 :::22                   :::*                    LISTEN      813/sshd
tcp6       0      0 127.0.0.1:8091          :::*                    LISTEN      11768/java

curl localhost:8082/artifactory/api/system/version -u admin:password
{
  "version" : "7.71.8",
  "revision" : "77108900",
  "addons" : [ ],
  "license" : "da39a3ee5e6b4b0d3255bfef95601890afd807090",
  "entitlements" : {
    "EVENT_BASED_PULL_REPLICATION" : false,
    "SMART_REMOTE_TARGET_FOR_EDGE" : false,
    "REPO_REPLICATION" : false,
    "MULTIPUSH_REPLICATION" : false
  }

Nickel

Installation du Reverse Proxy Nginx

Configurer Nginx en tant que reverse proxy pour JFrog Artifactory améliore la sécurité et la performance de votre déploiement. Ici, je ne vais pas le configurer en mode https !

Voici comment configurer Nginx avec Artifactory.

Assurez-vous que Nginx est installé sur votre serveur. Sur AlmaLinux 8, vous pouvez l'installer en utilisant :

sudo dnf install nginx -y

Après l'installation, ouvrez le fichier de configuration de Nginx pour éditer les paramètres. Utilisez un éditeur de texte comme vi ou nano.

sudo vi /etc/nginx/conf.d/artifactory.conf

Mettez-y ces lignes :

## server configuration
server {
    listen 80;

    server_name artifactory.robert.local;

    ## Application specific logs
    ## access_log /var/log/nginx/yourdomain.com-access.log timing;
    ## error_log /var/log/nginx/yourdomain.com-error.log;
    rewrite ^/$ /ui/ redirect;
    rewrite ^/ui$ /ui/ redirect;
    chunked_transfer_encoding on;
    client_max_body_size 0;
    location / {
        proxy_read_timeout  2400s;
        proxy_pass_header   Server;
        proxy_cookie_path   ~*^/.* /;
        proxy_pass          http://192.168.3.10:8082;
        proxy_next_upstream error timeout non_idempotent;
        proxy_next_upstream_tries    1;
        proxy_set_header    X-JFrog-Override-Base-Url $http_x_forwarded_proto://$host:$server_port;
        proxy_set_header    X-Forwarded-Port  $server_port;
        proxy_set_header    X-Forwarded-Proto $http_x_forwarded_proto;
        proxy_set_header    Host              $http_host;
        proxy_set_header    X-Forwarded-For   $proxy_add_x_forwarded_for;

        location ~ ^/artifactory/ {
            proxy_pass    http://192.168.3.10:8081;
        }
    }
}

On redémarre le service nginx :

sudo systemctl restart nginx.service

On autorise le flux http :

sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload

On desactive selinux (rhooo) :

sudo setsebool -P httpd_can_network_connect 1

On ajoute la ligne suivante dans le fichier /etc/hosts :

192.168.3.10    artifactory.robert.local

On teste :

Je ne peux pas tester car je n'ai pas de licence !

Comparaison des Versions de JFrog Artifactory

Chaque version d'Artifactory est conçue pour répondre à des besoins spécifiques, allant de la gestion de base des artefacts dans les petits projets (version OSS) à une solution de gestion d'artefacts à l'échelle de l'entreprise avec des fonctionnalités avancées de sécurité, haute disponibilité et analyse (version Enterprise Plus). Le choix de la version dépendra de la taille de votre équipe, de la complexité de vos besoins en matière de gestion d'artefacts et de votre budget.

Version OSS (Open Source Software)

  1. Caractéristiques:

    • Gestion des artefacts pour Maven et Gradle.
    • Support de base pour les dépôts.
    • Interface web pour la gestion des dépôts.
  2. Idéal pour:

    • Petites équipes ou projets individuels.
    • Projets nécessitant uniquement une gestion de base des artefacts Maven et Gradle.

Version Pro

  1. Caractéristiques:

    • Toutes les fonctionnalités de la version OSS.
    • Support pour Docker, npm, PyPI, NuGet et autres.
    • Fonctionnalités de sécurité avancées et intégration LDAP/AD.
    • REST API complète pour l'automatisation.
    • Intégration CI/CD avec Jenkins, Gitlab CI/CD etc.
  2. Idéal pour:

    • Équipes moyennes à grandes.
    • Projets nécessitant une prise en charge étendue des types de packages et une intégration CI/CD.

Version Pro X

  1. Caractéristiques:

    • Toutes les fonctionnalités de la version Pro.
    • Support pour les analyses de sécurité et de conformité.
    • Xray pour l'analyse et la gestion des vulnérabilités.
  2. Idéal pour:

    • Organisations ayant besoin d'analyses de sécurité approfondies.
    • Projets où la sécurité des artefacts est une priorité.

Version Enterprise

  1. Caractéristiques:

    • Toutes les fonctionnalités de Pro X.
    • Haute disponibilité avec support multi-site (réplication).
    • Support de l'équilibrage de charge et du clustering.
  2. Idéal pour:

    • Grandes entreprises avec des exigences de haute disponibilité.
    • Organisations nécessitant une gestion d'artefacts à l'échelle mondiale.

Version Enterprise Plus

  1. Caractéristiques:

    • Toutes les fonctionnalités de la version Enterprise.
    • Distribution des artefacts à grande échelle (distribution de binaires).
    • Accès à JFrog Mission Control et Insight pour une gestion et une surveillance centralisées.
  2. Idéal pour:

    • Entreprises à grande échelle avec des opérations globales.
    • Organisations recherchant une solution complète de gestion des artefacts et d'analyse des opérations.

Avantages et Inconvénients de JFrog Artifactory

L'utilisation de JFrog Artifactory présente plusieurs avantages et inconvénients qu'il est important de considérer pour évaluer son adéquation à un projet ou une organisation. Voici un aperçu détaillé.

Avantages de JFrog Artifactory

  1. Gestion Universelle des Artefacts: Artifactory supporte une grande variété de formats de packages, ce qui le rend idéal pour des environnements de développement hétérogènes.
  2. Intégration avec les Outils CI/CD: Son intégration aisée avec des outils tels que Jenkins, GitLab CI/CD et d'autres, facilite la mise en place d'un pipeline d'intégration et de livraison continues.
  3. Sécurité et Contrôle d'Accès: Artifactory offre des fonctionnalités avancées de sécurité, notamment le contrôle des accès et la gestion fine des permissions.
  4. Haute Disponibilité et Scalabilité: Conçu pour les entreprises, il peut être déployé dans des architectures haute disponibilité et s'adapte aux exigences de scalabilité.
  5. Réplication de Dépôts: Permet la réplication entre différentes instances d'Artifactory, facilitant ainsi la collaboration à l'échelle mondiale.

Inconvénients de JFrog Artifactory

  1. Complexité de Configuration: La richesse des fonctionnalités peut entraîner une complexité dans la configuration et la maintenance, surtout pour les utilisateurs moins expérimentés.
  2. Coût pour les Versions Avancées: Alors que la version OSS est gratuite, les versions Pro et Enterprise peuvent représenter un coût significatif pour les petites entreprises ou les projets individuels.
  3. Ressources Système: Artifactory peut être gourmand en ressources système, en particulier dans des configurations à grande échelle.
  4. Courbe d'Apprentissage: Les utilisateurs peuvent avoir besoin de temps pour se familiariser avec l'interface et les nombreuses fonctionnalités offertes.
  5. Dépendance à l'Écosystème JFrog: Pour tirer pleinement parti de toutes ses fonctionnalités, il peut être nécessaire de s'engager plus profondément dans l'écosystème JFrog, ce qui pourrait limiter la flexibilité dans le choix d'autres outils.

Conclusion

En conclusion, JFrog Artifactory se présente comme une solution polyvalente et robuste pour la gestion d'artefacts dans les environnements de développement logiciel. Sa capacité à s'intégrer avec divers outils de CI/CD, sa prise en charge de multiples formats de packages et ses options de configuration avancées le rendent adapté à une large gamme de besoins et de contextes.

Bien que JFrog Artifactory soit un outil puissant, il est essentiel de peser ses avantages contre ses inconvénients, notamment en termes de complexité de configuration et de coût pour les versions supérieures. La décision d'adopter Artifactory devrait être basée sur une évaluation approfondie de vos besoins spécifiques en gestion d'artefacts, de votre infrastructure existante et de vos objectifs à long terme.