Zu installierende Pakete
Zum Aufbau eines APT-Repositories sind folgende Pakete zu installieren:- gnupg
- reprepro
- ruby
- rubygems
- apache2
Installation der benötigten Pakete
apt-getinstallgnupgapt-getinstallrepreproapt-getinstallapache2apt-getinstallrubyapt-getinstallrubygemsgeminstallfpmcd/usr/binln-s/var/lib/gems/1.9.1/gems/fpm-0.4.39/bin/fpm
Konfiguration der Pakete
GnuPG
Zum signieren der Pakete muss ein GPG-Key erstellt werden, dies geschieht durch das Kommando:
Erstellung eines GPG-Keys
gpg --gen-key
- Art des Schlüssels: RSA und RSA (voreingestellt)
- Schlüssellänge: 2048
- Gültigkeit: 0 = Schlüssel verfällt nie
- Ihr Name ("Vorname Nachname"): Meine Firma
- Email-Adresse: ebusiness-entwicklung@my-company.com
- Kommentar: Signatur Key
- Passphrase:
Es wird sowohl ein Public- als auch ein Private-Key generiert, beide werden im Verzeichnis ~/.gnupg abgelegt, pubring.gpg enthält die öffentlichen Schlüssel, secring.gpg die privaten. Die Privaten Schlüssel sind nicht weiterzugeben. Der Public-Key wird später exportiert.
reprepro
Anlage des Repository-Verzeichnisses:
Anlage des Repository-Verzeichnisses
mkdir-p/var/packages/debian/confchown-R jenkins:utempter/var/packageschmod-R 755/var/packages
/var/packages/debian/conf/distributions
Origin: Firma GmbHLabel: Firma GmbHCodename: wheezyArchitectures: i386 amd64Components: default release stable testingDescription: APT RepositorySignWith: ebusiness-entwicklung@my-company.comDebOverride: override.wheezyDscOverride: override.wheezy
reprepro --delete clearvanished
reprepro remove wheezy my-project
reprepro path
exportREPREPRO_BASE_DIR=/var/packages/debian
Eine leere Override-Datei wird passend zur Festlegung in der distribution-Datei erstellt:
override Datei
touchoverride.wheezy
options Datei
verbosebasedir .
Export des Public GPG-Keys
gpg --armor --output/var/packages/ebusiness.key --exportebusiness-entwicklung@my-company.com
Einrichten des jenkins-Servers
Achtung: Beim Paketbau durch "fpm" werden alle Daten in ein temporäres Verzeichnis kopiert, per Default ist das /tmp. Aufgrund der Größe der Hybris-Pakete muss dies per --workdir Parameter umgestellt werden, im Root-Dateisystem wird der Platz sonst schnell zu knapp. Für den Fall wurde unter /opt/fpm/tmp/ ein passendes Verzeichnis angelegt.Damit der jenkins-Server beim Bau der Shops Debian Pakete erzeugt und diese ins Repository legt ist ein zusätzlicher Verarbeitungsschritt (Shell ausführen) einzufügen mit folgenden folgende Befehlen:
Jenkins Konfiguration Beispiel
VERSION=`cat${WORKSPACE}/hybris/config/version.properties |sed-e's|version=V ||g'`VERSION=${VERSION}.${BUILD_NUMBER}touchtemp.debrm*.debmkdir-p temp/optmkdir-p temp/etc/init.dcpscripts/hybristomcattemp/etc/init.d/chmod755 temp/etc/init.d/hybristomcatrm-rf hybris/temprm-rf hybris/data/csvrm-rf hybris/data/impexrm-rf hybris/data/luceneindexcp-r hybris temp/opt/rm-rf temp/opt/hybris/log/junitrm-f temp/opt/hybris/bin/platform/*.logrm-f temp/opt/hybris/bin/platform/tomcat-6/bin/wrapper-linux-x86-32cptemp/opt/hybris/bin/platform/tomcat-6/bin/wrapper-linux-x86-64temp/opt/hybris/bin/platform/tomcat-6/bin/wrapper-linux-x86-32find. -name'*.class'-or -name'*.java'-or -name'*.conf'-or -name'*.properties'|xargsperl -pi -e's/opt\/jenkins\/jobs\/my-job\/workspace/opt/g'find. -name'*.conf'|xargsperl -pi -e's/\/usr\/lib\/jvm\/java-7-oracle\/jre\/bin\/java/\/usr\/bin\/java/g'sed-i -e's|/opt/jenkins/jobs/.*/workspace/hybris|/opt/hybris|g'temp/opt/hybris/bin/platform/tomcat-6/conf/server.xmlsed-i -e's|/opt/jenkins/jobs/.*/workspace/hybris|/opt/hybris|g'temp/opt/hybris/bin/platform/tomcat-6/conf/server-minimal.xmlfpm -sdir-t deb --workdir/opt/fpm/tmp/--name"my-project"--version"${VERSION}"-a all -C"temp"--pre-install"${WORKSPACE}/temp/opt/hybris/config/automation/pre-install.sh"--post-install"${WORKSPACE}/temp/opt/hybris/config/automation/post-install.sh"--before-remove"${WORKSPACE}/temp/opt/hybris/config/automation/pre-uninstall.sh"--after-remove"${WORKSPACE}/temp/opt/hybris/config/automation/post-uninstall.sh".exportREPREPRO_BASE_DIR=/var/packages/debianlockfile-create/var/lock/createreporeprepro -C default includedeb wheezy my-package_${VERSION}_all.deblockfile-remove/var/lock/createrepo
pre-install.sh
#! /bin/bashiftest-e/etc/init.d/hybristomcat;then/etc/init.d/hybristomcatstopfi
- durchführen eines Datenbankupdates, falls eine Datei namens /opt/deploydir/updatedb existiert
- einspielen von Impex-Dateien aus dem Verzeichnis /opt/deploydir/impex, falls diese existieren
- starten des Hybris-Servers
- verteilen statischer Inhalte auf vorgeschaltete Apache-Server, wenn vorhanden
post-install.sh
#! /bin/bash# make a database update if necessaryiftest-e"/opt/deploydir/updatedb";thencd/opt/hybris/bin/platformmkdir-p/opt/hybris/config/ci_build/libcd. ./setantenv.shant updatesystem -Dtenant=masterrm-f"/opt/deploydir/updatedb"cd-fi# import impex filesiftest-d"/opt/deploydir/impex";thennumimpex=`ls-la/opt/deploydir/impex/*.impex 2>/dev/null|grep-c".impex"`echo"Importing ${numimpex} files..."iftest${numimpex} -gt 0;thencd/opt/hybris/bin/platformmkdir-p/opt/hybris/config/ci_build/libcd. ./setantenv.shant runcronjob -Dcronjob="DeploymentImpexImportJob"-Dtenant=mastercd-fifi# start hybris tomcat/etc/init.d/hybristomcatstart# copy static content to apache directories (if available)USE_CLUSTER="false"iftest-e"/etc/hybriscluster";then./etc/hybrisclusteriftest"${HYBRIS_CLUSTER_NODES}X"!="X";thenUSE_CLUSTER="true"fifiiftest"${USE_CLUSTER}"="true";thenforNODEin${HYBRIS_CLUSTER_NODES};doiftest-e"/opt/${NODE}/webroot";thencp-r/opt/hybris/bin/custom/my-extension/web/webroot/*/opt/${NODE}/webroot/rm-rf/opt/${NODE}/webroot/WEB-INFfidone
fi
Pre- und Postuninstall-Scripte
Mit Pre- und Postuninstall-Scripten können Aktionen vor und nach der deInstallation des Pakets durchgeführt werden. Es handelt sich dabei um gewöhnliche Shell-Scripte. Für die Hybris-Pakete nutzen wir das Preuninstall-Script um den Hybris-Server herunterzufahren, falls bereits einer installiert ist, normal sollte das Start-/Stopscript nach der Deinstallation nicht mehr vorhanden sein, das Script ist reine Vorsichtsmaßnahme
pre-uninstall.sh
#! /bin/bashiftest-e/etc/init.d/hybristomcat;then/etc/init.d/hybristomcatstopfi
Apache Server für Zugriff auf das Repository konfigurieren
Der Apache Server sorgt für den Zugriff über http auf das Repository. Es wird ein weiterer Virtual Host angelegt, die Konfigurationsdatei wird in /etc/apache2/sites-available angelegt, in dem Fall hat sie den kompakten Namen "apt" und folgenden Inhalt:
apt apache virtual host
<VirtualHost*>DocumentRoot /var/packagesServerName apt.intranet.my-company.comErrorLog /var/log/apache2/apt-error.logLogLevel warnCustomLog /var/log/apache2/apt-access.log combinedServerSignature On# Allow directory listings so that people can browse the repository from their browser too<Directory"/var/packages">Options Indexes FollowSymLinks MultiViewsDirectoryIndex index.htmlAllowOverride OptionsOrder deny,allowDeny From Allallow from 10.9.Satisfy ANY</Directory># Hide the conf/ directory for all repositories<Directory"/var/packages/*/conf">Order allow,denyDeny from allSatisfy all</Directory># Hide the db/ directory for all repositories<Directory"/var/packages/*/db">Order allow,denyDeny from allSatisfy all</Directory></VirtualHost>
Zur Aktivierung des Servers wird die Konfiguration mit "a2ensite apt" aktiviert und der Apache mit "/etc/init.d/apache2 reload" dazu gebracht, die Konfiguration neu einzulesen.
Einrichtung der Server, die auf das Repository zugreifen
Einbinden des Public-Keys
Damit die Signatur der Pakete geprüft werden kann, muss der Public-Key eingebunden werden:
import public key
wget http://apt.intranet.my-company.com/ebusiness.keyapt-key add ebusiness.key
/etc/apt/sources.list
deb http://apt.intranet.my-company.com/debianwheezy default
Wie wird das Paket aktualisiert
Bei den Testmaschinen erfolgen Updates vollautomatisch in der Nacht mit Hilfe von cron-apt. Soll das Paket manuell aktualisiert werden, ist folgendes einzugeben
Update the project
apt-get update && apt-get --only-upgradeinstallmy-project
Wie wird die Datenbank aktualisiert
Ein "Systemupdate" wird immer dann angestoßen, wenn bei Installation des Pakets die Datei /opt/deploydir/updatedb existiert
Update database
cd/opt/deploydirtouchupdatedbapt-get update && apt-get --only-upgradeinstall my-project
No comments:
Post a Comment