DEVOPS
L’APPROCHE PACKAGING NATIF
BBL DOCKER - 26 FEVRIER 2020
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
HENRI GOMEZ
▸ Head of SRE @ Saagie
▸ +30 ans dans l’industrie logicielle
▸ Dev C/Java, CI/CD, QA, Ops/SRE
▸ OpenSource Activist
▸ Apache Tomcat
▸ JPackage
▸ Obuildfactory / Devops Incubator
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
DÉFINITION D’UN LIVRABLE
▸ C’est un artefact utilisable par les équipes up-stream
▸ Pour un Dev ce sont donc les équipes QA et/ou Ops
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
JAR, WAR, ZIP, TARBALL ?
▸ Ce sont des archives simples, non opérables directement
▸ Pas de gestion de dépendances
▸ Pas de gestion de pré-requis
▸ Pas de convention de déploiement
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
FLATPAK, SNAP ?
▸ Packaging par overlay
▸ Démon nécessaire
▸ Proche du packaging Docker dans l’esprit
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
NIX ?
▸ Le système de packaging le plus avancé
▸ Pour NixOS
▸ Très riche, trop peut être
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
DOCKER ?
▸ C’est à la fois une archive et un format de Run
▸ Un écosystème majeur s’est construit autour
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
LES QUESTIONS À SE POSER
▸ Gestion des pré-requis
▸ Cycle de vie (mise à jour, suppression)
▸ Quid du déploiement (qui, quoi, comment)
▸ Localisation dans le FileSystem (FHS rules)
▸ Les droits d'exécutions et accès dans le FileSystem
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
PACKAGING NATIF
▸ Coeur de la pile applicative des OS
▸ Gestion des dépendances
▸ Mise à jour automatique ou sélective
▸ Largement utilisé par les Ops
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
PACKAGING SOUS UNIX
▸ RPM (Redhat Package Manager) sous RHEL/CentOS/
Fedora, SLES/OpenSuse, Mandriva
▸ DEB sous Debian/Ubuntu
▸ PKG sous Solaris
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
QU’EST-CE QU’UN PACKAGE ?
▸ Un fichier (.rpm, .deb)
▸ Des données (fichiers et programmes)
▸ Du code exécuté lors de l’installation, la mise à jour ou la
suppression du package
▸ Lié à une architecture (Intel, ARM, PowerPC en 32 ou
64bits) ou neutre (exemple: une application Java)
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
POINTS COMMUNS AVEC MAVEN / GRADLE
▸ Construction par DSL
▸ Quelques commandes pour les manipuler (rpm, apt-get)
▸ Gestion des dépendances pour la construction mais aussi
pour l’exécution
▸ Dépôts de packages, accessible en local ou via HTTP
▸ Nexus et Artifactory peuvent servir de dépôts RPM
▸ Mises à jour automatiques ou contrôlées
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
UN DSL POUR LES OPS
▸ Simple
▸ Quelques macros
▸ Shell powered
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
CONSTRUIRE UN RPM
▸ Des fichiers binaires - depuis l’entrepôt de livrables
▸ Des sources - depuis le SCM
▸ Un fichier de construction, le SPECFILE
TEXTE
ENTÊTE DÉCLARATIF
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
CONSTRUCTION
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
HOOK DE PRÉ-INSTALL
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
HOOK DE POST-INSTALL
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
HOOK DE PRE-UNINSTALL
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
HOOK DE POST-UNINSTALL
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
HOOK DE DEPENDANCES INTER PACKAGES
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
DÉCLARATION DU CONTENU
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
HISTORIQUE
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
AUTONOME
▸ Un package est auto-suffisant
▸ Programmes principaux
▸ Connectable à des services (ex: logrotate / cron)
▸ Données
▸ Comptes utilisateurs d’exécution
▸ Contrôle total sur le cycle de vie ‘en situation’
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
CYCLE DE VIE IN SITU
▸ Contrôle total sur le cycle de vie ‘en situation’
▸ Hooks pre/post installation
▸ Hook lors de la mise à jour
▸ Hooks pre/post désinstallation
▸ Hooks sur opération sur autres packages
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
ET ENCORE
▸ Un processus déterministe et donc réplicable
▸ Peut être utilisé par Ansible, Puppet ou Chef
▸ Des artifacts centralisables comme pour Maven
▸ Une approche composant d’exécution
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
TYPES DE RPMS
RPMS OSRPMS OSRPMS OS
Fournis par votre distribution Linux
RPMS APPLICATIFRPMS APPLICATIFRPMS APPLICATIF
Produits par les Devs & OpsRPMS CONFIGURATION
RPMS CONFIGURATION
RPMS CONFIGURATION
RPMS CONFIGURATION
Produits par les Ops
dépréciés par Rudder/Ansible/Puppet.Chef
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
L’ASSEMBLAGE
▸ Installer une usine à packages (Jenkins)
▸ Créer un dépôt de packages
▸ Apache HTTPd / NGinx
▸ Nexus/Artifactory
▸ Construire et tester sur environnement minimal (JEOS)
▸ Pour éviter les dépendances implicites (ex: curl)
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
USINE A PACKAGES
▸ Jenkins (what else ?)
▸ Un agent Jenkins par distribution cible
▸ Déployer les outils de construction packages sur l’agent
▸ rpm-build, make, autoconf (RPM)
▸ build-essential, devscripts, ubuntu-dev-tools (DEB)
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
DÉPÔT DE PACKAGES
▸ Serveur Apache HTTPd / NGinx
▸ Installer createrepo (RPM), dpkg-dev (DEB)
▸ Upload via web-dav ou scp (plus simple)
▸ Nexus/Artifactory
▸ Installer createrepo (RPM), dpkg-dev (DEB)
▸ Upload via web-dav (par Maven / Gradle par exemple)
▸ SaaS
▸ https://packagecloud.io/
▸ https://build.opensuse.org/
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
CONCLUSION
▸ Une approche simple
▸ Mise en oeuvre par étape
▸ Adaptée à de petites infrastructures
▸ Utilisable avec Ansible, Puppet ou Chef
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
RPM DEVOPS
▸ https://github.com/hgomez/devops-incubator/
▸ RPMs pour Subversion, GitBlit, Jenkins, Nexus…
▸ Pour OpenSuse, CentOS/Fedora
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
MA PETITE FORGE
▸ Subversion
▸ Git
▸ Jenkins
▸ Nexus
▸ SonarQube
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
SUBVERSION
▸ Apache HTTPd server
▸ Subversion
▸ Viewvc
▸ Comptes utilisateurs
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
GIT
▸ Environnement Java (OpenJDK, Sun/Oracle ou IBM)
▸ GitBlit
▸ Compte utilisateur spécifique
▸ Tomcat 7 powered & single webapp
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
JENKINS
▸ Environnement Java (OpenJDK, Sun/Oracle ou IBM)
▸ Jenkins
▸ Compte utilisateur spécifique
▸ Tomcat 7 powered & single webapp
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
NEXUS
▸ Environnement Java (OpenJDK, Sun/Oracle ou IBM)
▸ Nexus
▸ Compte utilisateur spécifique
▸ Tomcat 7 powered & single webapp
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
SONARQUBE
▸ Environnement Java (OpenJDK, Sun/Oracle ou IBM)
▸ Sonar
▸ Compte utilisateur spécifique
▸ Tomcat 7 powered & single webapp
▸ SQL backend (Derby ou MySQL)
BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
GLOBAL FRONT-END
▸ Apache HTTPd VHosts
▸ Subversion
▸ Git
▸ Jenkins
▸ Nexus
▸ SonarQube
HTTPS://GITHUB.COM/HGOMEZ/DEVOPS-INCUBATOR/
LITTERATURE
▸ http://www.rpm.org/max-rpm/
▸ https://docs.fedoraproject.org/en-US/packaging-guidelines/
▸ http://en.opensuse.org/openSUSE:Specfile_guidelines
▸ Nexus : https://help.sonatype.com/repomanager3/formats/yum-repositories
▸ Artifactory : https://www.jfrog.com/confluence/display/JFROG/RPM+Repositories
HTTPS://GITHUB.COM/HGOMEZ/DEVOPS-INCUBATOR/
DES QUESTIONS ?
HTTPS://GITHUB.COM/HGOMEZ/DEVOPS-INCUBATOR/
LICENCES ET COPYRIGHT
▸ Photos et logos appartiennent à leur auteurs/propriétaires
respectifs.
▸ Contenu sous Creative Commons 3.0
▸ http://creativecommons.org/licenses/by-nc-sa/3.0/us/

20200225 bbl-docker-packaging-natif

  • 1.
  • 2.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 HENRI GOMEZ ▸ Head of SRE @ Saagie ▸ +30 ans dans l’industrie logicielle ▸ Dev C/Java, CI/CD, QA, Ops/SRE ▸ OpenSource Activist ▸ Apache Tomcat ▸ JPackage ▸ Obuildfactory / Devops Incubator
  • 3.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 DÉFINITION D’UN LIVRABLE ▸ C’est un artefact utilisable par les équipes up-stream ▸ Pour un Dev ce sont donc les équipes QA et/ou Ops
  • 4.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 JAR, WAR, ZIP, TARBALL ? ▸ Ce sont des archives simples, non opérables directement ▸ Pas de gestion de dépendances ▸ Pas de gestion de pré-requis ▸ Pas de convention de déploiement
  • 5.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 FLATPAK, SNAP ? ▸ Packaging par overlay ▸ Démon nécessaire ▸ Proche du packaging Docker dans l’esprit
  • 6.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 NIX ? ▸ Le système de packaging le plus avancé ▸ Pour NixOS ▸ Très riche, trop peut être
  • 7.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 DOCKER ? ▸ C’est à la fois une archive et un format de Run ▸ Un écosystème majeur s’est construit autour
  • 8.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 LES QUESTIONS À SE POSER ▸ Gestion des pré-requis ▸ Cycle de vie (mise à jour, suppression) ▸ Quid du déploiement (qui, quoi, comment) ▸ Localisation dans le FileSystem (FHS rules) ▸ Les droits d'exécutions et accès dans le FileSystem
  • 9.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 PACKAGING NATIF ▸ Coeur de la pile applicative des OS ▸ Gestion des dépendances ▸ Mise à jour automatique ou sélective ▸ Largement utilisé par les Ops
  • 10.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 PACKAGING SOUS UNIX ▸ RPM (Redhat Package Manager) sous RHEL/CentOS/ Fedora, SLES/OpenSuse, Mandriva ▸ DEB sous Debian/Ubuntu ▸ PKG sous Solaris
  • 11.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 QU’EST-CE QU’UN PACKAGE ? ▸ Un fichier (.rpm, .deb) ▸ Des données (fichiers et programmes) ▸ Du code exécuté lors de l’installation, la mise à jour ou la suppression du package ▸ Lié à une architecture (Intel, ARM, PowerPC en 32 ou 64bits) ou neutre (exemple: une application Java)
  • 12.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 POINTS COMMUNS AVEC MAVEN / GRADLE ▸ Construction par DSL ▸ Quelques commandes pour les manipuler (rpm, apt-get) ▸ Gestion des dépendances pour la construction mais aussi pour l’exécution ▸ Dépôts de packages, accessible en local ou via HTTP ▸ Nexus et Artifactory peuvent servir de dépôts RPM ▸ Mises à jour automatiques ou contrôlées
  • 13.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 UN DSL POUR LES OPS ▸ Simple ▸ Quelques macros ▸ Shell powered
  • 14.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 CONSTRUIRE UN RPM ▸ Des fichiers binaires - depuis l’entrepôt de livrables ▸ Des sources - depuis le SCM ▸ Un fichier de construction, le SPECFILE
  • 15.
  • 16.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 CONSTRUCTION
  • 17.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 HOOK DE PRÉ-INSTALL
  • 18.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 HOOK DE POST-INSTALL
  • 19.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 HOOK DE PRE-UNINSTALL
  • 20.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 HOOK DE POST-UNINSTALL
  • 21.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 HOOK DE DEPENDANCES INTER PACKAGES
  • 22.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 DÉCLARATION DU CONTENU
  • 23.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 HISTORIQUE
  • 24.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 AUTONOME ▸ Un package est auto-suffisant ▸ Programmes principaux ▸ Connectable à des services (ex: logrotate / cron) ▸ Données ▸ Comptes utilisateurs d’exécution ▸ Contrôle total sur le cycle de vie ‘en situation’
  • 25.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 CYCLE DE VIE IN SITU ▸ Contrôle total sur le cycle de vie ‘en situation’ ▸ Hooks pre/post installation ▸ Hook lors de la mise à jour ▸ Hooks pre/post désinstallation ▸ Hooks sur opération sur autres packages
  • 26.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 ET ENCORE ▸ Un processus déterministe et donc réplicable ▸ Peut être utilisé par Ansible, Puppet ou Chef ▸ Des artifacts centralisables comme pour Maven ▸ Une approche composant d’exécution
  • 27.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 TYPES DE RPMS RPMS OSRPMS OSRPMS OS Fournis par votre distribution Linux RPMS APPLICATIFRPMS APPLICATIFRPMS APPLICATIF Produits par les Devs & OpsRPMS CONFIGURATION RPMS CONFIGURATION RPMS CONFIGURATION RPMS CONFIGURATION Produits par les Ops dépréciés par Rudder/Ansible/Puppet.Chef
  • 28.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 L’ASSEMBLAGE ▸ Installer une usine à packages (Jenkins) ▸ Créer un dépôt de packages ▸ Apache HTTPd / NGinx ▸ Nexus/Artifactory ▸ Construire et tester sur environnement minimal (JEOS) ▸ Pour éviter les dépendances implicites (ex: curl)
  • 29.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 USINE A PACKAGES ▸ Jenkins (what else ?) ▸ Un agent Jenkins par distribution cible ▸ Déployer les outils de construction packages sur l’agent ▸ rpm-build, make, autoconf (RPM) ▸ build-essential, devscripts, ubuntu-dev-tools (DEB)
  • 30.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 DÉPÔT DE PACKAGES ▸ Serveur Apache HTTPd / NGinx ▸ Installer createrepo (RPM), dpkg-dev (DEB) ▸ Upload via web-dav ou scp (plus simple) ▸ Nexus/Artifactory ▸ Installer createrepo (RPM), dpkg-dev (DEB) ▸ Upload via web-dav (par Maven / Gradle par exemple) ▸ SaaS ▸ https://packagecloud.io/ ▸ https://build.opensuse.org/
  • 31.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 CONCLUSION ▸ Une approche simple ▸ Mise en oeuvre par étape ▸ Adaptée à de petites infrastructures ▸ Utilisable avec Ansible, Puppet ou Chef
  • 32.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 RPM DEVOPS ▸ https://github.com/hgomez/devops-incubator/ ▸ RPMs pour Subversion, GitBlit, Jenkins, Nexus… ▸ Pour OpenSuse, CentOS/Fedora
  • 33.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 MA PETITE FORGE ▸ Subversion ▸ Git ▸ Jenkins ▸ Nexus ▸ SonarQube
  • 34.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 SUBVERSION ▸ Apache HTTPd server ▸ Subversion ▸ Viewvc ▸ Comptes utilisateurs
  • 35.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 GIT ▸ Environnement Java (OpenJDK, Sun/Oracle ou IBM) ▸ GitBlit ▸ Compte utilisateur spécifique ▸ Tomcat 7 powered & single webapp
  • 36.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 JENKINS ▸ Environnement Java (OpenJDK, Sun/Oracle ou IBM) ▸ Jenkins ▸ Compte utilisateur spécifique ▸ Tomcat 7 powered & single webapp
  • 37.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 NEXUS ▸ Environnement Java (OpenJDK, Sun/Oracle ou IBM) ▸ Nexus ▸ Compte utilisateur spécifique ▸ Tomcat 7 powered & single webapp
  • 38.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 SONARQUBE ▸ Environnement Java (OpenJDK, Sun/Oracle ou IBM) ▸ Sonar ▸ Compte utilisateur spécifique ▸ Tomcat 7 powered & single webapp ▸ SQL backend (Derby ou MySQL)
  • 39.
    BBL DOCKER -PACKAGING NATIF - 26 FEVRIER 2020 GLOBAL FRONT-END ▸ Apache HTTPd VHosts ▸ Subversion ▸ Git ▸ Jenkins ▸ Nexus ▸ SonarQube
  • 40.
    HTTPS://GITHUB.COM/HGOMEZ/DEVOPS-INCUBATOR/ LITTERATURE ▸ http://www.rpm.org/max-rpm/ ▸ https://docs.fedoraproject.org/en-US/packaging-guidelines/ ▸http://en.opensuse.org/openSUSE:Specfile_guidelines ▸ Nexus : https://help.sonatype.com/repomanager3/formats/yum-repositories ▸ Artifactory : https://www.jfrog.com/confluence/display/JFROG/RPM+Repositories
  • 41.
  • 42.
    HTTPS://GITHUB.COM/HGOMEZ/DEVOPS-INCUBATOR/ LICENCES ET COPYRIGHT ▸Photos et logos appartiennent à leur auteurs/propriétaires respectifs. ▸ Contenu sous Creative Commons 3.0 ▸ http://creativecommons.org/licenses/by-nc-sa/3.0/us/