DevOpsL’approche packaging natifParisJUG 10 Janvier 2012
Henri GomezCI Architect @ Axway+20 ans dans l’industrie logicielleArchitecte Java, CI et Direction de productionOpenSource...
3,2,1 - Rocket LaunchedCourtesy Steve Jurvetson
Définition d’un livrableC’est un artefact utilisable par les équipes up-streamPour un Dev ce sont donc les équipes QA et/ou...
Jar, war, zip, tarball ?Ce sont des archives simples, non opérables directement
Les questions à se poserGestion des pré-requisCycle de vie (mise à jour, suppression)Quid du déploiement (qui, quoi, comme...
Packaging NatifCoeur de la pile applicative des OSGestion des dépendancesMise à jour automatique ou sélectiveLargement uti...
Packaging sous UnixRPM (Redhat Package Manager) sous RHEL/CentOS/Fedora, SLES/OpenSuse, MandrivaDEB sous Debian/UbuntuPKG ...
Qu’est-ce qu’un package ?Un fichier (.rpm, .deb)Des données (fichiers et programmes)Du code exécuté lors de l’installation, ...
Points communs avecMavenConstruction par DSLQuelques commandes pour les manipuler (rpm, apt-get)Gestion des dépendances po...
Un DSL pour les OpsSimpleQuelques macrosSH powered
Construire un RPMDes fichiers binaires - depuis l’entrepôt de livrablesDes sources - depuis le SCMUn fichier de construction...
Entête déclaratifName: myappVersion: 1.0.0Release: 1Summary: MyApp powered by Apache TomcatGroup: Applications/Communicati...
Construction%prep%setup -q -c%build%install# Prep the install location.rm -rf $RPM_BUILD_ROOTmkdir -p $RPM_BUILD_ROOT%{_in...
Hook de pré-install%pre%if 0%{?suse_version} > 1140%service_add_pre %{myapp}.service%endif# add user and group%{_sbindir}/...
Hook de post-install%post%if 0%{?suse_version} > 1140%service_add_post %{myapp}.service%endifif [ "$1" == "1" ]; then  # r...
Hook de pre-uninstall%preun%if 0%{?suse_version} > 1140%service_del_preun %{myapp}.service%endifif [ "$1" == "0" ]; then  ...
Hook de post-uninstall%postun%if 0%{?suse_version} > 1140%service_del_postun %{myapp}.service%endif
Déclaration du contenu%files%defattr(-,root,root)%attr(0755,%{myappusername},%{myappusername}) %dir %{myapplogdir}%attr(07...
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....
AUTONOMEUn package est auto-suffisant  Programmes principaux et annexes (ex: logrotate)  Données  Comptes utilisateurs d’ex...
CYCLE DE VIE IN SITUContrôle total sur le cycle de vie ‘en situation’  Hooks pre/post installation  Hook lors de la mise à...
ET ENCOREUn processus déterministe et donc réplicablePeut être utilisé par Puppet ou ChefDes artifacts centralisables comm...
Types de RPMs       RPMs OS       RPMs OS        RPMs OSFournis par votre distribution Linux                              ...
L’ASSEMBLAGEInstaller une usine à packages (Jenkins)Créer un dépôt de packages  Apache HTTPd  Nexus/ArtifactoryPréparer de...
Usine a packagesJenkins (what else ?)Un agent Jenkins par distribution cibleDéployer les outils de construction packages s...
dépôt de packagesServeur Apache HTTPd  Installer createrepo (RPM), dpkg-dev (DEB)  Upload via web-dav ou ssh (plus simple)...
JeOSJuste les composants essentiels de l’OSMoins de packages installésTaux de mise à jour plus faibleRéduction des risques...
De JeOS à instanceInventaire des besoinsPré-requis et dépendancesSpécificités applicatives
Les communsServeur SSHComptes administrateurMonitoring (SNMP)Firewall (port 22 et SNMP autorisés)
Ma petite FORGESubversionGitJenkinsNexusSonar
SubversionApache HTTPd serverSubversionViewvcComptes utilisateurs
GITEnvironnement Java (OpenJDK, Sun/Oracle ou IBM)GitBlit  Compte utilisateur spécifique  Tomcat 7 powered & single webapp
JenkinsEnvironnement Java (OpenJDK, Sun/Oracle ou IBM)Jenkins  Compte utilisateur spécifique  Tomcat 7 powered & single web...
NexusEnvironnement Java (OpenJDK, Sun/Oracle ou IBM)Nexus  Compte utilisateur spécifique  Tomcat 7 powered & single webapp
SONAREnvironnement Java (OpenJDK, Sun/Oracle ou IBM)Sonar  Compte utilisateur spécifique  Tomcat 7 powered & single webapp ...
Global FRONT-ENDApache HTTPd VHosts Subversion Git Jenkins Nexus Sonar
ConclusionUne approche simpleMise en oeuvre par étapeAdaptée à de petites infrastructuresUtilisable avec Puppet ou Chef
RPM DevOPShttp://code.google.com/p/devops-incubator/  RPMs pour Subversion, GitBlit, Jenkins, Nexus, Sonar  Pour OpenSuse ...
LIREhttp://www.rpm.org/max-rpm/http://fedoraproject.org/wiki/Packaging/Guidelineshttp://en.opensuse.org/openSUSE:Specfile_g...
Des questions ?
Licences et copyright Photos et logos appartiennent à leur auteurs/ propriétaires respectifs. Contenu sous Creative Common...
Upcoming SlideShare
Loading in...5
×

20120110 paris jug-packaging-natif

893

Published on

Présentation DevOps au ParisJUG.

Approche Packaging Natif

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
893
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
15
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

20120110 paris jug-packaging-natif

  1. 1. DevOpsL’approche packaging natifParisJUG 10 Janvier 2012
  2. 2. Henri GomezCI Architect @ Axway+20 ans dans l’industrie logicielleArchitecte Java, CI et Direction de productionOpenSource Activist Apache Tomcat JPackage openjdk-osx-build
  3. 3. 3,2,1 - Rocket LaunchedCourtesy Steve Jurvetson
  4. 4. Définition d’un livrableC’est un artefact utilisable par les équipes up-streamPour un Dev ce sont donc les équipes QA et/ou Ops
  5. 5. Jar, war, zip, tarball ?Ce sont des archives simples, non opérables directement
  6. 6. Les questions à se poserGestion des pré-requisCycle de vie (mise à jour, suppression)Quid du déploiement (qui, quoi, comment)Localisation dans le FileSystem (FHS rules)Les droits dexécutions et accès dans le FileSystem
  7. 7. Packaging NatifCoeur de la pile applicative des OSGestion des dépendancesMise à jour automatique ou sélectiveLargement utilisé par les Ops
  8. 8. Packaging sous UnixRPM (Redhat Package Manager) sous RHEL/CentOS/Fedora, SLES/OpenSuse, MandrivaDEB sous Debian/UbuntuPKG sous Solaris
  9. 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 lasuppression du packageLié à une architecture (Intel, ARM, PowerPC en 32 ou64bits) ou neutre (exemple: une application Java)
  10. 10. Points communs avecMavenConstruction par DSLQuelques commandes pour les manipuler (rpm, apt-get)Gestion des dépendances pour la construction mais aussipour l’exécutionDépôts de packages, accessible en local ou via HTTPNexus et Artifactory peuvent servir de dépôts RPMMises à jour automatiques ou contrôlées
  11. 11. Un DSL pour les OpsSimpleQuelques macrosSH powered
  12. 12. Construire un RPMDes fichiers binaires - depuis l’entrepôt de livrablesDes sources - depuis le SCMUn fichier de construction, le SPECFILE
  13. 13. Entête déclaratifName: myappVersion: 1.0.0Release: 1Summary: MyApp powered by Apache TomcatGroup: Applications/CommunicationsURL: http://www.mycorp.org/Vendor: MyCorpPackager: MyPackagerLicense: AGPLv1BuildArch: noarch%define tomcat_rel 7.0.22%define myapp myapp%define myappusername myuser%define myappuserid 1234%define myappgroupid 1234Requires: java = 1.6.0Source0: apache-tomcat-%{tomcat_rel}.tar.gzSource1: myapp.war%descriptionMyApp powered by Apache Tomcat
  14. 14. Construction%prep%setup -q -c%build%install# Prep the install location.rm -rf $RPM_BUILD_ROOTmkdir -p $RPM_BUILD_ROOT%{_initrddir}mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig
  15. 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. 16. Hook de post-install%post%if 0%{?suse_version} > 1140%service_add_post %{myapp}.service%endifif [ "$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/nullfi
  17. 17. Hook de pre-uninstall%preun%if 0%{?suse_version} > 1140%service_del_preun %{myapp}.service%endifif [ "$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. 18. Hook de post-uninstall%postun%if 0%{?suse_version} > 1140%service_del_postun %{myapp}.service%endif
  19. 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. 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. 21. AUTONOMEUn 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. 22. CYCLE DE VIE IN SITUContrô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. 23. ET ENCOREUn processus déterministe et donc réplicablePeut être utilisé par Puppet ou ChefDes artifacts centralisables comme pour MavenUne approche composant d’exécution
  24. 24. Types de RPMs RPMs OS RPMs OS RPMs OSFournis par votre distribution Linux RPMs Applicatif RPMs Applicatif RPMs ApplicatifRPMs Configuration RPMs Configuration Produits par les Devs & Ops RPMs Configuration RPMs Configuration Produits par les Ops
  25. 25. L’ASSEMBLAGEInstaller une usine à packages (Jenkins)Créer un dépôt de packages Apache HTTPd Nexus/ArtifactoryPréparer des images Linux (exemple: JeOS)
  26. 26. Usine a packagesJenkins (what else ?)Un agent Jenkins par distribution cibleDéployer les outils de construction packages sur l’agent rpm-build, make, autoconf (RPM) build-essential, devscripts, ubuntu-dev-tools (DEB)
  27. 27. dépôt de packagesServeur 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. 28. JeOSJuste les composants essentiels de l’OSMoins de packages installésTaux de mise à jour plus faibleRéduction des risques de failles de sécuritéUne empreinte mémoire et disque réduite
  29. 29. De JeOS à instanceInventaire des besoinsPré-requis et dépendancesSpécificités applicatives
  30. 30. Les communsServeur SSHComptes administrateurMonitoring (SNMP)Firewall (port 22 et SNMP autorisés)
  31. 31. Ma petite FORGESubversionGitJenkinsNexusSonar
  32. 32. SubversionApache HTTPd serverSubversionViewvcComptes utilisateurs
  33. 33. GITEnvironnement Java (OpenJDK, Sun/Oracle ou IBM)GitBlit Compte utilisateur spécifique Tomcat 7 powered & single webapp
  34. 34. JenkinsEnvironnement Java (OpenJDK, Sun/Oracle ou IBM)Jenkins Compte utilisateur spécifique Tomcat 7 powered & single webapp
  35. 35. NexusEnvironnement Java (OpenJDK, Sun/Oracle ou IBM)Nexus Compte utilisateur spécifique Tomcat 7 powered & single webapp
  36. 36. SONAREnvironnement Java (OpenJDK, Sun/Oracle ou IBM)Sonar Compte utilisateur spécifique Tomcat 7 powered & single webapp SQL backend (Derby ou MySQL)
  37. 37. Global FRONT-ENDApache HTTPd VHosts Subversion Git Jenkins Nexus Sonar
  38. 38. ConclusionUne approche simpleMise en oeuvre par étapeAdaptée à de petites infrastructuresUtilisable avec Puppet ou Chef
  39. 39. RPM DevOPShttp://code.google.com/p/devops-incubator/ RPMs pour Subversion, GitBlit, Jenkins, Nexus, Sonar Pour OpenSuse 11.4 & 12.1
  40. 40. LIREhttp://www.rpm.org/max-rpm/http://fedoraproject.org/wiki/Packaging/Guidelineshttp://en.opensuse.org/openSUSE:Specfile_guidelinesNexus : http://code.google.com/p/nexus-yum-plugin/Artifactory : http://wiki.jfrog.org/confluence/display/RTF/YUM+Repositories
  41. 41. Des questions ?
  42. 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/
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×