Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)

« Projet dev » : différence entre les versions

De AJLSM
Aller à la navigation Aller à la recherche
Ligne 74 : Ligne 74 :


== Sur la recette (vm: mercure) ==
== Sur la recette (vm: mercure) ==
<syntaxhighlight code="bash">
  ssh mercure
  ssh mercure
  cd recette
  cd recette
Ligne 95 : Ligne 96 :
  ant start.tomcat
  ant start.tomcat
  ./tail_all
  ./tail_all
</syntaxhighlight>


[[category:How To]]
[[category:How To]]

Version du 29 avril 2015 à 09:48

Prérequis

Installer des paquets

sudo apt-get install subversion ant openjdk-7-jdk

Configurer l'accès au SVN en SSH

Le projet dev est dans SVN sur le serveur moorea. SVN est accessible depuis l'exterieur depuis le host svn.ajlsm.com, mais à l'interne à 192.168.123.16. Parce que j'utilisent le projet dev sur des serveurs à distant comme mercure mais aussi au bureau, je configure le fichier /etc/hosts pour le host svn.ajlsm.com :

192.168.123.16  moorea svn.ajlsm.com redmine.ajlsm.com mw.ajlsm.com

Sur le serveur moorea, configuration de l'utilisateur (remplacer ctate par votre utilisateur).

groupadd ctate
useradd -m -k -d -g ajlsm ctate
usermod -G ajlsm,ctate ctate
passwd ctate
vi /etc/ssh/sshd_config
/etc/init.d/sshd restart

Sur la nouvelle machine du développeur :

ssh-keygen -t dsa
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_dsa.pub ctate@192.168.123.16
ssh-copy-id -i ~/.ssh/id_rsa.pub ctate@192.168.123.16

Environnement Linux

On commence par éditer le fichier /home/$USER/.profile et ajouter cette ligne :

export JAVA_HOME=/usr/lib/jvm/default-java

Quickstart

  1. Création du domaine OVH
  2. Installation sur sa machine
  3. Installation sur la recette (vm mercure)

En local

Côté projet dev

 svn co svn+ssh://192.168.123.16/home/svn/dev
 cd dev/clients
 mkdir MonNouveauClient
 cd MonNouveauClient
 cp ../clients/obspm/client.xml .
 sed -i -e s/obspm/MonNouveauClient/g client.xml
 vim client.xml # mettre le nouvel port du projet (qui s'appelle un port >_<)
 svn commit # fini coté projet dev

Création du projet

 cd ~/Workspace
 mkdir MonNouveauClient
 cp ../dev/workspace/build-workspace.xml .
 ant -f build-workspace.xml 
 # Il faut répondre avec le nom exact tel qu'il apparait dans la liste
 ant build.pleade-libre 
 ant build.pleade-entreprise 
 ant build.MonNouveauClient

Ensuite, on peut configurer sa machine

 ant create.db.and.grant.user
 ant create.db.user

Sur la recette (vm: mercure)

 ssh mercure
 cd recette
 mkdir MonNouveauClient
 cp ../obspm/build_workspace.xml .
 ln -s ../obspm/dev 
 ln -s ../obspm/pleade-libre
 ln -s ../obspm/pleade-entreprise
 ant -f build_workspace.xml
 # Il faut répondre à la question en indiquant le nom du client tel qu'il apparait dans la liste
 cd /etc/apache2/sites-available
 sudo cp obsm.ajlsm.com.conf MonNouveauClient.ajlsm.com.conf
 sed -i -e s/obspm/MonNouveauClient/g MonNouveauClient.ajlsm.com.conf
 sudo a2ensite MonNouveauClient.ajlsm.com.conf
 sudo service apache2 reload
 cd ~/recette/MonNouveauClient
 ant create.db.and.grant.user
 ant build.pleade-libre 
 ant build.pleade-entreprise 
 ant build.MonNouveauClient
 ant start.tomcat
 ./tail_all

Les tâches ANT importantes

  • restart: Redémarre Tomcat.
  • clean.restart: Nettoyer tomcat pendant un restart.
  • super.clean.restart : Supprimer le datadir et nettoyer tomcat pendant un restart.
  • rebuild : Arrêter tomcat et faire un rebuild et redémarrer tomcat.
  • clean.rebuild : Arrêter tomcat et nettoyer tomcat et faire un rebuild et redémarrer tomcat.
  • super.clean.rebuild : Arrêter tomcat et nettoyer tomcat et supprimer le datadir et faire un rebuild et redémarrer tomcat.
  • drop.and.create.db: Pour supprimer la base de données et recommencer
  • build.dev: Il faut faire ça chaque fois que le projet dev ou un fichier client.properties est modifié.
  • luke : Voir les données dans lucene dans le datadir.
  • svn.update : Mettre à jour tous les projets de SVN.
  • svn.update.ajlsm, svn.update.pleade-libre, svn.update.pleade-entreprise, ... Mettre à jour un projet de SVN.


svn revert . -R && svn status | rm -rf $(awk '/^?/{$1 = ""; print $0}') # pour supprimer tous les "unversioned files" dans le projet.

Les tâches annexes

  • create.db : pour créer la base de données seulement.
  • create.db.and.grant.user : pour créer la base de données et grant permissions à un utilisateur qui éxiste déjà.
  • create.db.and.user : pour créer la base de données et l'utilisateur et grant permissions à un utilisateur qui n'éxiste pas encore.
  • create.db.user : pour créer l'utilisateur dans la base de données seulement.
  • grant.db.user : Pour grant permissions vers la base de données qui éxiste déjà.
  • create.log.apps : Créer des shell scripts pour voir les logs et tail les logs (./tail_tomcat, ./less_cocoon, ...)
  • drop.db : Supprimer la base de données.
  • install : Installer tous les projets de SVN si les repertoire n'éxistent pas encore.
  • install.ajlsm, install.pleade-libre, install.pleade-entreprise, ... : Installer un projet de SVN si le repertoire n'éxiste pas encore.
  • configure.tomcat : pour configurer le context.xml et server.xml avec le port.prefix et les connexions base de données.
  • eclipse.project.ajlsm, eclipse.project.pleade-libre, eclipse.project.pleade-entreprise, ... : Configurer un projet pour eclipse.

Détail de la syntaxe du fichier client.xml

  • Les clients sont configuré dans dev/clients/{nom du client}/client.xml.
  • Pour ajouter un nouveau client, créer un repertoire avec le nom d'un nouveau client, ou plus facile un projet dans svn, dans dev/clients. Copier le client.xml d'un autre client le plus proche dans le repertoire.

Voici un exemple court d'un fichier client.xml :

<client id="ad84">
	<dev>
	</dev>
	<applications>
	</applications>
	<machine>
	</machine>
</client>

<dev>...</dev>

Le section <dev> est pour configurer le client pour un développeur à AJLSM. Voici un explication pour plusiers properties importants :

  • "port.prefix" qui est différent pour chaque client dans le projet dev pour démarrer plusiers tomcats pour plusiers clients au même temps.
  • "database" peut-être "mysql", "postgresql", "oracle", "mssql" ou "hsql" si on utilisent les sources dans la branche Pleade_3.5 ou avant.
  • "pleade.install.dir" est lié à "install.dir" mais c'est important pour bm-grenoble par exemple qui utilisent 2 applications AJLSM : pleade et notix, est c'est le chemin vers le webapp dans tomcat où vont les sources quand on fait un build.
  • "install.dir" utilise "pleade.install.dir" est c'est envoyé au build.xml de pleade.
  • "pleade.url-interne" l'url vers le webapp de tomcat pour faire des requêtes qui doivent éviter de contacter le réseau depuis le public URL, comme avec la publication.
  • "pleade.public-url" L'url pour accèder l'application normalement, soit vers tomcat, soit vers apache.
  • "pleade.data-dir" le chemin vers le datadir pour pleade, sans le préfixe "file://".
  • "pleade.sdx-data-dir" le chemin vers le datadir pour pleade, avec le préfixe "file://".
  • "pleade.img-server.racines" les chemins vers les images.
  • "pleade.images.preparees" les chemins vers les images préparées.
  • "pleade.ead-docs-dir" les chemins vers les documents ead.
<dev>
	<property name="port.prefix" value="209" />
	<property name="database" value="mysql"/>
	
	<property name="pleade.install.dir" location="${basedir}/tomcat/webapps/ad84" />
	<property name="install.dir" value="${pleade.install.dir}"/>
	<property name="pleade.url-interne" value="http://${computer.hostname}:${port.prefix}80/ad84" />
	<property name="pleade.public-url" value="http://${computer.hostname}:${port.prefix}80/ad84" />
	
	<property name="pleade.data-dir" value="${basedir}/data/datadir/ad84"/>
	<property name="pleade.sdx-data-dir" value="file://${pleade.data-dir}"/>
	<property name="pleade.img-server.racines" value="/mnt/disk500g/ad84/images"/>
	<property name="pleade.images.preparees" value="/mnt/disk500g/ad84/images-preparees"/>
	<property name="pleade.images.preparees.copier" value="true"/>
	<property name="pleade.ead-docs-dir" value="${basedir}/data/ead"/>
</dev>

<applications>...</applications>

Le section <applications> est pour specifier tous les applications AJLSM qui sont utilisés et configurés déja dans dev/applications/applications.xml (pleade-libre, pleade-entreprise, pleade-mets, sdx-ajlsm, ajlsm, ...). On peut aussi configurer d'autres applications dans svn pour le client. LCertains attributs peut-être utiliser comme :

  • svn="..." l'URL vers le projet dans SVN.
  • installDirProperty="pleade.install.dir" important pour bien faire le build pour pleade.
  • childApplication="..." pleade-libre, pleade-entreprise ou pleade-mets selon le client.
  • webappDir="..." le chemin relatif dans le projet dans SVN pour le client qui contient les fichiers webapp surchargés dans pleade, pour qu'Eclipse puisse copier directement des fichiers xsl, css, js, etc quand ils sont modifiés pour faire un refresh et voir les changements dans le browser pour éviter faire un build chaque fois.

Voici un exemple :

<applications>
	<ad84 svn="svn+ssh://svn.ajlsm.com/home/svn/ad84/branches/new-design_20141010" installDirProperty="pleade.install.dir" childApplication="pleade-entreprise" webappDir="src/pleade3">
	</ad84>
	<ajlsm/>
	<pleade-entreprise/>
	<pleade-libre/>
	<sdx-ajlsm/>
	<tomcat />
	<thesx />
</applications>

Il y a des targets ANT important pour faire des builds depuis le projet dev (prepare, build, build.only, client) pour un application. Quand on fait un build, les applications sont copiés dans le repertoire "app/build" dans le workspace pour être modifiés avant de faire un build. J'explique les 4 targets ANT ici pour l'application ad84 :

<target name="prepare.client">

  • Il y a regex pour changer ces properties (install.dir, pleade.src.dir, src.module.thesaurus) dans le fichier ad84/ad84.properties
  • Il y a regex pour éviter d'utiliser ces fichiers (~/ant.properties, ~/ad84.properties, ant.properties) qui peut-être sont utilisés par développeurs avant le projet dev, sinon, il y a un conflit avec un mélange de properties dans le build.
  • Il y a regex pour éviter de mettre le webapp dans ${ant.home}/${build.webapp[^}]*.dir, parce que le projet dev va mettre le build dans tomcat/webapps directement.
  • Après on va changer plusiers fichiers dans le projet du client ou peut-être les sources de pleade aussi selon le client, comme WEB-INF/properties/pleade-admin.properties par exemple.
<target name="prepare.ad84" unless="quick" depends="properties">
	<antcall target="prepare.pleade-entreprise"/>
	<regex file="app/build/ad84/ad84.properties" property="install.dir" value="${pleade.install.dir}" />
	<regex file="app/build/ad84/ad84.properties" property="pleade.src.dir" value="${basedir}/app/build/pleade-entreprise" />
	<regex file="app/build/ad84/ad84.properties" property="src.module.thesaurus" value="${basedir}/thesx/src/web/pleade" />

	<regex file="app/build/ad84/build.xml" find='&lt;property file="\$\{user\.home\}/\$\{project\.code\}.properties"\s*&gt;' replace="" />
	<regex file="app/build/ad84/build.xml" find='&lt;property file="\$\{user\.home\}/\.ant\.properties"\s*/&gt;' replace="" />
	<regex file="app/build/ad84/build.xml" find='&lt;property file="\./\.ant\.properties"\s*/&gt;' replace="" />
	<regex file="app/build/ad84/build.xml" find='\$\{ant\.home\}/\$\{build\.webapp[^}]*\.dir\}' replace="${basedir.regex.escaped}/app/build/ad84/build/webapp/pleade" />

	<regex file="app/build/ad84/src/pleade3/WEB-INF/properties/pleade-admin.properties" property="pleade.url-interne" value="${pleade.url-interne}" />
</target>

<target name="build.client">

  • Ça va ajouter les sources pour faire le build dans le repertoire app/build avant de modifier avec regex les fichiers.
  • Après ça va appeler le target prepare qui est expliqué déjà.
  • Après ça va appeler le build.xml du projet.
<target name="build.ad84" depends="properties">
	<copy todir="app/build" verbose="true">
		<fileset dir="." excludes="**/.project" includes="ad84/**"/>
		<fileset dir="." excludes="**/.project" includes="pleade-libre/**"/>
		<fileset dir="." excludes="**/.project" includes="pleade-entreprise/**"/>
		<fileset dir="." excludes="**/.project" includes="sdx-ajlsm/**"/>
		<fileset dir="." excludes="**/.project" includes="ajlsm/**"/>
	</copy>
	<antcall target="prepare.ad84"/>

	<exec dir="app/build/ad84" executable="sh">
		<arg value="ant.sh" />
		<arg value="install" />
	</exec>
</target>

<target name="build.only.client">

  • C'est pour appeler tout les targets "copy.*" pour les applications utilisés, après les targets "compile.*" pour tout les applications avec des sources java, après copier les surcharges dans le repertoire surcharge dans le workspace.
<target name="build.only.ad84" depends="properties">
	<antcall target="copy.pleade-libre"/>
	<antcall target="copy.pleade-entreprise"/>
	<antcall target="copy.ad84"/>
	<antcall target="compile.sdx-ajlsm"/>
	<antcall target="compile.pleade-libre"/>
	<antcall target="compile.pleade-entreprise"/>
	
	<copy todir="${install.dir}" overwrite="true">
		<fileset dir="surcharge" />
	</copy>
</target>

<target name="copy.client">

  • Ici il faut spécifier les repertoires avec des fichiers pour le webapp pour être copiés dans le ${install.dir}
<target name="copy.ad84" depends="properties">
	<copy todir="${install.dir}" overwrite="true">
		<fileset dir="app/build/ad84/src/pleade3" includes="**">
		</fileset>
	</copy>
</target>

<machines>...</machines>

Ici on peut configurer plusiers machines qui contiennent des environments pour les clients (prod, preprod, demo, ...). Une machine peut contenir des attributs comme :

  • host="..." l'address IP vers le serveur qui contient l'application.
  • hostName="..." le nom plus lisible du serveur qui contient l'application.
  • user="..." l'utilisateur UNIX pour accèder le serveur.
  • devDir="..." le chemin vers le repertoire ou on peut stoquer des fichiers avec le projet dev.
  • updateDir="..." le chemin vers le repertoire qui contient les version de l'application pour installer.
  • internalsAcces="..." pour savoir quel fichier dans le projet internals contient les mot de passe pour se connecter au serveur.

Un élément <machine> peut contenir plusiers éléments <environment> si il y a plusiers applications installés ici (comme prod, preprod, ...). Voici un exemple :

<environment name="recet"
		devDir="/apps/webserver/tomcat_preprod/output/build" 
		updateDir="/opt/data/webapps" 
		backupDir="/opt/data/webapps/backup"
		symbolicLink="/opt/data/webapps/pleade-preprod" 
		webappDir="/apps/webserver/tomcat_preprod/output/build/webapps"
		surchargeDir="/opt/data/webapps/surcharge"
		dataDir="/opt/data/sdx-data-recet" 
		updateName="pleade-bmo-v${version}-${today}.tar.gz"
		startupCmd="sudo /etc/init.d/tomcat_preprod start"
		shutdownCmd="sudo /etc/init.d/tomcat_preprod stop"
		tomcatTempDir="/apps/webserver/tomcat_preprod/output/build/temp"
		tomcatWorkDir="/apps/webserver/tomcat_preprod/output/build/work"
		tomcatLogsDir="/apps/webserver/tomcat_preprod/output/build/logs"
		httpRestartCmd="sudo /etc/init.d/httpd restart"
		version="1.3"
		>
	<property name="pleade.url-interne" value="http://localhost:8082/pleade_preprod"/>

Il y a plusiers attributs pour un environment, comme :

  • devDir="..." le chemin vers le repertoire ou on peut stoquer des fichiers avec le projet dev.
  • updateDir="..." le chemin vers le repertoire qui contient les version de l'application pour installer.
  • backupDir="..." où on peut mettre des backups de la base de données, datadir et webapp.
  • symbolicLink="..." le chemin vers le lien symbolique qui spécifie quel webapp est utilisé.
  • webappDir="..." où se trouve les webapps envoyé au serveur.
  • surchargeDir="..." où le client peut mettre des surcharges pour faire un build avec des surcharges et un webapp, comme pour msh-dijon par exemple.
  • updateName="..." Comment écrire un .tar.gz pour envoyer le webapp au serveur.
  • startupCmd="..." Pour se rappeler comment démarrer tomcat.
  • shutdownCmd="..." Pour se rappeler comment arrêter tomcat.
  • tomcatTempDir="..." le repertoire temporaire à supprimer pour nettoyer tomcat.
  • tomcatWorkDir="..." le repertoire de travail à supprimer pour nettoyer tomcat.
  • tomcatLogsDir="..." le repertoire où se trouve le log catalina.out de tomcat.
  • httpdRestartCmd="..." Pour se rappeler comment redémarrer httpd
  • apacheRestartCmd="..." Pour se rappeler comment redémarrer apache2

Les tâches ANT pour un environnement

Si on a configuré un environment comme preprod par exemple, on peut faire des choses utile après, comme :

  • recet.build.msh-dijon : construire un build de l'application pour envoyer au serveur selon les properties pour l'environment.
  • send.ant.to.recet.msh-dijon : Pour envoyer l'application ANT si il n'éxiste pas sur un serveur.
  • send.build.xml.to.recet.msh-dijon : Pour envoyer un build.xml avec des commandes utiles pour redémarrer ou faire un build avec des surcharges comme msh-dijon par exemple.
  • send.recet.webapp.to.pandor.u-bourgogne.fr : Pour envoyer le webapp avec rsync vers un serveur
  • ssh.recet : Pour voir la commande pour connecter avec SSH vers un serveur.
  • recet.steps.msh-dijon : voir les étapes pour installer un build pour mettre à jour un application à distance. Par exemple :

ant recet.steps.msh-dijon

ctate@ctate:~/projet/msh-dijon-113 $ ant recet.steps.msh-dijon 
copy this file: dev/temp/environment/recet/send/update/update-RECET-msh-dijon-2015-01-27.tar.gz
to: ajlsmsh@pandor.u-bourgogne.fr:/opt/data/webapps
rsync -P dev/temp/environment/recet/send/update/update-RECET-msh-dijon-2015-01-27.tar.gz ajlsmsh@pandor.u-bourgogne.fr:/opt/data/webapps
then ssh to: ssh ajlsmsh@193.52.245.146
cd /opt/data/webapps
tar xzfv update-RECET-msh-dijon-2015-01-27.tar.gz

Backup database
mysqldump --max_allowed_packet=100M -u ajlsm -p  pleade_20141126 > /opt/data/webapps/backup/update-RECET-msh-dijon-2015-01-27-backup.sql # password : w5s!pl#Tei
mysql -u ajlsm -p  pleade_20141126 # password : w5s!pl#Tei
drop table module_eadeac_default; drop table module_eadeac_eac; drop table module_eadeac_eac_docs;  drop table module_eadeac_ead; drop table module_eadeac_ead_docs;  drop table module_eadeac_oai_dc; drop table module_eadeac_oai_dc_docs;  drop table module_eadeac_qdc; drop table module_eadeac_qdc_docs; 

Backup datadir
mv /opt/data/sdx-data-recet /opt/data/webapps/backup/update-RECET-msh-dijon-2015-01-27-datadir-backup
mkdir /opt/data/sdx-data-recet

Switch to new webapp
rm /opt/data/webapps/pleade-preprod
ln -s /opt/data/webapps/update-RECET-msh-dijon-2015-01-27 /opt/data/webapps/pleade-preprod

Shutdown tomcat
sudo /etc/init.d/tomcat_preprod stop

cleanup tomcat
rm -rf /apps/webserver/tomcat_preprod/output/build/temp/* /apps/webserver/tomcat_preprod/output/build/work/*

Startup tomcat
sudo /etc/init.d/tomcat_preprod start

Logs
tail -f /apps/webserver/tomcat_preprod/output/build/logs/catalina.out
tail -f /opt/data/webapps/pleade-preprod/WEB-INF/logs/cocoon-$(date +"%Y%m%d").log
tail -f /opt/data/webapps/pleade-preprod/WEB-INF/logs/sdx-$(date +"%Y%m%d").log
tail -f /opt/data/webapps/pleade-preprod/WEB-INF/logs/publication-$(date +"%Y%m%d").log
tail -f /opt/data/webapps/pleade-preprod/WEB-INF/logs/auto-publication-$(date +"%Y%m%d").log

Visit the site: https://pandor.u-bourgogne.fr/pleade_prod

or update files directly
from: /home/ctate/projet/msh-dijon-113/dev/temp/environment/recet/new/update-RECET-msh-dijon-2015-01-27
to: ajlsmsh@pandor.u-bourgogne.fr:

Commandes utiles pour travailler sur mercure

cd /home/ajlsm/recette/ad971
ant svn.update # update all projects
svn status pleade-libre # voir si il y a des modifications pour SVN. Vous pouvez ignorer les fichiers avec "X *pleade-image*" parce qu'ils sont des fichiers SVN external
cd pleade-libre

cd ..
svn commit -m "blah blah" pleade-libre # committer des sources dans pleade-libre
ant rebuild # Arrêter tomcat et faire un rebuild et redémarrer tomcat. 
ant clean.rebuild # Si il y a des fichiers qui étaient supprimés dans les sources
ant super.clean.rebuild # Si vous voulez supprimer le datadir
ant drop.and.create.db # pour supprimer la base de données et recommencer
ant build.dev # il faut faire ça chaque fois que le projet dev ou un fichier client.properties est modifié.

Se mettre à la racine des sources pour voir les modifications et :

ajlsm@mercure:~/recette/ad971/ad971$ svn st -u

Pour commiter :

ajlsm@mercure:~/recette/ad971/ad971$ svn commit -m "Modification des formulaires de recherche pour gmaps"