Henri Gomez
CI Architect @ Axway
+20 ans dans l’industrie logicielle
Architecte Java, CI et Direction de production
OpenSource Activist
Apache Tomcat
JPackage
openjdk-osx-build
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
Jar, war, zip, tarball ?
Ce sont des archives simples, non opérables directement
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
Packaging Natif
Coeur de la pile applicative des OS
Gestion des dépendances
Mise à jour automatique ou sélective
Largement utilisé par les Ops
Packaging sous Unix
RPM (Redhat Package Manager) sous RHEL/CentOS/
Fedora, SLES/OpenSuse, Mandriva
DEB sous Debian/Ubuntu
PKG sous Solaris
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)
Points communs avec
Maven
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
Un DSL pour les Ops
Simple
Quelques macros
SH powered
Construire un RPM
Des fichiers binaires - depuis l’entrepôt de livrables
Des sources - depuis le SCM
Un fichier de construction, le SPECFILE
Historique
%changelog
* Sat Dev 03 2011 henri.gomez@gmail.com 1.0.3-1
- Adapt spec to OpenSuse 12.1
* Sun Nov 20 2011 henri.gomez@gmail.com 1.0.2-1
- Make use of OpenSuse 11.4 macros
* Sun Jun 19 2011 henri.gomez@gmail.com 1.0.1-1
- Update Application
* Sun Jun 19 2011 henri.gomez@gmail.com 1.0.0-2
- Add user account creation/deletion
* Sun May 22 2011 henri.gomez@gmail.com 1.0.0-1
- Initial RPM
AUTONOME
Un package est auto-suffisant
Programmes principaux et annexes (ex: logrotate)
Données
Comptes utilisateurs d’exécution
Contrôle total sur le cycle de vie ‘en situation’
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ésintallation
Hooks sur opération sur autres packages
ET ENCORE
Un processus déterministe et donc réplicable
Peut être utilisé par Puppet ou Chef
Des artifacts centralisables comme pour Maven
Une approche composant d’exécution
Types de RPMs
RPMs OS
RPMs OS
RPMs OS
Fournis par votre distribution Linux
RPMs Applicatif
RPMs Applicatif
RPMs Applicatif
RPMs Configuration
RPMs Configuration Produits par les Devs & Ops
RPMs Configuration
RPMs Configuration
Produits par les Ops
L’ASSEMBLAGE
Installer une usine à packages (Jenkins)
Créer un dépôt de packages
Apache HTTPd
Nexus/Artifactory
Préparer des images Linux (exemple: JeOS)
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)
dépôt de packages
Serveur Apache HTTPd
Installer createrepo (RPM), dpkg-dev (DEB)
Upload via web-dav ou ssh (plus simple)
Nexus/Artifactory
Installer createrepo (RPM), dpkg-dev (DEB)
Upload via web-dav (par Maven par exemple)
JeOS
Juste les composants essentiels de l’OS
Moins de packages installés
Taux de mise à jour plus faible
Réduction des risques de failles de sécurité
Une empreinte mémoire et disque réduite
De JeOS à instance
Inventaire des besoins
Pré-requis et dépendances
Spécificités applicatives
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/