Publicité

20120110 paris jug-packaging-natif

Cloud Advisor à Wescale
10 Jan 2012
Publicité

Contenu connexe

Présentations pour vous(20)

Publicité
Publicité

20120110 paris jug-packaging-natif

  1. DevOps L’approche packaging natif ParisJUG 10 Janvier 2012
  2. 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
  3. 3,2,1 - Rocket Launched Courtesy Steve Jurvetson
  4. 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
  5. Jar, war, zip, tarball ? Ce sont des archives simples, non opérables directement
  6. 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
  7. Packaging Natif Coeur de la pile applicative des OS Gestion des dépendances Mise à jour automatique ou sélective Largement utilisé par les Ops
  8. Packaging sous Unix RPM (Redhat Package Manager) sous RHEL/CentOS/ Fedora, SLES/OpenSuse, Mandriva DEB sous Debian/Ubuntu PKG sous Solaris
  9. 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)
  10. 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
  11. Un DSL pour les Ops Simple Quelques macros SH powered
  12. Construire un RPM Des fichiers binaires - depuis l’entrepôt de livrables Des sources - depuis le SCM Un fichier de construction, le SPECFILE
  13. Entête déclaratif Name: myapp Version: 1.0.0 Release: 1 Summary: MyApp powered by Apache Tomcat Group: Applications/Communications URL: http://www.mycorp.org/ Vendor: MyCorp Packager: MyPackager License: AGPLv1 BuildArch: noarch %define tomcat_rel 7.0.22 %define myapp myapp %define myappusername myuser %define myappuserid 1234 %define myappgroupid 1234 Requires: java = 1.6.0 Source0: apache-tomcat-%{tomcat_rel}.tar.gz Source1: myapp.war %description MyApp powered by Apache Tomcat
  14. Construction %prep %setup -q -c %build %install # Prep the install location. rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT%{_initrddir} mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig
  15. Hook de pré-install %pre %if 0%{?suse_version} > 1140 %service_add_pre %{myapp}.service %endif # add user and group %{_sbindir}/groupadd -r -g %{myappgroupid} %{myappusername} 2>/dev/null || : %{_sbindir}/useradd -s /sbin/nologin -c "%{myapp} user" -g %{myappusername} -r -d % {myappdir} -u %{myappuserid} %{myappusername} 2>/dev/null || :
  16. Hook de post-install %post %if 0%{?suse_version} > 1140 %service_add_post %{myapp}.service %endif if [ "$1" == "1" ]; then # register app as service systemctl enable %{myapp}.service >/dev/null 2>&1 # Generated random password for RO and RW accounts RANDOMVAL=`echo $RANDOM | md5sum | sed "s| -||g" | tr -d " "` sed -i "s|@@SKEL_RO_PWD@@|$RANDOMVAL|g" %{_sysconfdir}/sysconfig/%{myapp} RANDOMVAL=`echo $RANDOM | md5sum | sed "s| -||g" | tr -d " "` sed -i "s|@@SKEL_RW_PWD@@|$RANDOMVAL|g" %{_sysconfdir}/sysconfig/%{myapp} pushd %{myappdir} >/dev/null ln -s %{myapplogdir} logs ln -s %{myapptempdir} temp ln -s %{myappworkdir} work popd >/dev/null fi
  17. Hook de pre-uninstall %preun %if 0%{?suse_version} > 1140 %service_del_preun %{myapp}.service %endif if [ "$1" == "0" ]; then # Uninstall time, stop App and cleanup # stop Application [ -x "/etc/init.d/%{myapp}" ] && /etc/init.d/%{myapp} stop %{_sbindir}/userdel %{myappusername} %{_sbindir}/groupdel %{myappusername} rm -rf %{myappworkdir}/* %{myapptempdir}/* # unregister app from services systemctl disable %{myapp}.service >/dev/null 2>&1 # finalize housekeeping rm -rf %{myappdir} rm -rf %{myapplogdir} rm -rf %{myapptempdir} rm -rf %{myappworkdir} fi
  18. Hook de post-uninstall %postun %if 0%{?suse_version} > 1140 %service_del_postun %{myapp}.service %endif
  19. Déclaration du contenu %files %defattr(-,root,root) %attr(0755,%{myappusername},%{myappusername}) %dir %{myapplogdir} %attr(0755, root,root) %{_initrddir}/%{myapp} %attr(0644,root,root) %{_systemdir}/%{myapp}.service %config(noreplace) %{_sysconfdir}/sysconfig/%{myapp} %config %{_sysconfdir}/logrotate.d/%{myapp} %config %{_sysconfdir}/security/limits.d/%{myapp} %{myappdir}/bin %{myappdir}/conf %{myappdir}/lib %attr(-,%{myappusername}, %{myappusername}) %{myappdir}/webapps %attr(0755,%{myappusername},%{myappusername}) %dir %{myappdatadir} %attr(0755,%{myappusername},%{myappusername}) %dir %{myapptempdir} %attr(0755,%{myappusername},%{myappusername}) %dir %{myappworkdir} %doc %{myappdir}/NOTICE %doc %{myappdir}/RUNNING.txt %doc %{myappdir}/LICENSE %doc %{myappdir}/RELEASE-NOTES
  20. 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
  21. 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’
  22. 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
  23. 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
  24. 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
  25. 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)
  26. 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)
  27. 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)
  28. 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
  29. De JeOS à instance Inventaire des besoins Pré-requis et dépendances Spécificités applicatives
  30. Les communs Serveur SSH Comptes administrateur Monitoring (SNMP) Firewall (port 22 et SNMP autorisés)
  31. Ma petite FORGE Subversion Git Jenkins Nexus Sonar
  32. Subversion Apache HTTPd server Subversion Viewvc Comptes utilisateurs
  33. GIT Environnement Java (OpenJDK, Sun/Oracle ou IBM) GitBlit Compte utilisateur spécifique Tomcat 7 powered & single webapp
  34. Jenkins Environnement Java (OpenJDK, Sun/Oracle ou IBM) Jenkins Compte utilisateur spécifique Tomcat 7 powered & single webapp
  35. Nexus Environnement Java (OpenJDK, Sun/Oracle ou IBM) Nexus Compte utilisateur spécifique Tomcat 7 powered & single webapp
  36. SONAR Environnement Java (OpenJDK, Sun/Oracle ou IBM) Sonar Compte utilisateur spécifique Tomcat 7 powered & single webapp SQL backend (Derby ou MySQL)
  37. Global FRONT-END Apache HTTPd VHosts Subversion Git Jenkins Nexus Sonar
  38. Conclusion Une approche simple Mise en oeuvre par étape Adaptée à de petites infrastructures Utilisable avec Puppet ou Chef
  39. RPM DevOPS http://code.google.com/p/devops-incubator/ RPMs pour Subversion, GitBlit, Jenkins, Nexus, Sonar Pour OpenSuse 11.4 & 12.1
  40. LIRE http://www.rpm.org/max-rpm/ http://fedoraproject.org/wiki/Packaging/Guidelines http://en.opensuse.org/openSUSE:Specfile_guidelines Nexus : http://code.google.com/p/nexus-yum-plugin/ Artifactory : http://wiki.jfrog.org/confluence/display/RTF/YUM+Repositories
  41. Des questions ?
  42. 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/
Publicité