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 39 : Ligne 39 :
= Quickstart =
= Quickstart =


# Création du domaine OVH
# Installation sur sa machine
# Installation sur la recette (vm mercure)
== En local ==
Côté projet dev
Côté projet dev
  svn co svn+ssh://192.168.123.16/home/svn/dev
  svn co svn+ssh://192.168.123.16/home/svn/dev
Ligne 49 : Ligne 53 :
  svn commit # fini coté projet dev
  svn commit # fini coté projet dev


Sur sa machine
Création du projet
  cd ~/Workspace
  cd ~/Workspace
  mkdir MonNouveauClient
  mkdir MonNouveauClient
  cp ../dev/workspace/build-workspace.xml .
  cp ../dev/workspace/build-workspace.xml .
  ant -f build-workspace.xml  
  ant -f build-workspace.xml  
  # Attention, il pose une question, il faut répondre en indiquant le nom du client tel qu'il apparait dans la liste
  # Il faut répondre avec le nom exact tel qu'il apparait dans la liste
  ant build.pleade-libre  
  ant build.pleade-libre  
  ant build.pleade-entreprise  
  ant build.pleade-entreprise  
Ligne 63 : Ligne 67 :
  ant create.db.user
  ant create.db.user


Sur la recette (mercure)
== Sur la recette (vm: mercure) ==
ssh mercure
  cd recette
  cd recette
  mkdir MonNouveauClient
  mkdir MonNouveauClient
Ligne 72 : Ligne 77 :
  ant -f build_workspace.xml
  ant -f build_workspace.xml
  # Il faut répondre à la question en indiquant le nom du client tel qu'il apparait dans la liste
  # Il faut répondre à la question en indiquant le nom du client tel qu'il apparait dans la liste
  # Création du domaine OVH
  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
ant build.pleade-libre
ant build.pleade-entreprise
ant build.MonNouveauClient
ant start.tomcat
./tail_all


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

Version du 29 avril 2015 à 09:38

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
ant build.pleade-libre 
ant build.pleade-entreprise 
ant build.MonNouveauClient
ant start.tomcat
./tail_all

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 importantes

  • clean.tomcat : pour vider le temp et le work de tomcat.
  • configure.tomcat : pour configurer le context.xml et server.xml avec le port.prefix et les connexions base de données.
  • 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.ajlsm, install.pleade-libre, install.pleade-entreprise, ... : Installer un projet de SVN si le repertoire n'éxiste pas encore.
  • install : Installer tous les projets de SVN si les repertoire n'éxistent pas encore.
  • eclipse.project.ajlsm, eclipse.project.pleade-libre, eclipse.project.pleade-entreprise, ... : Configurer un projet pour eclipse.
  • luke : Voir les données dans lucene dans le datadir.
  • start : Démarrer tomcat et eXiste si nécessaire.
  • stop : Arrêter tomcat et eXiste si nécessaire.
  • restart : Arrêter et démarrer tomcat et eXiste si nécessaire.
  • clean.restart : Nettoyer tomcat pendant un restart.
  • super.clean.restart : Supprimer le datadir et nettoyer tomcat pendant un restart.
  • restart.tomcat : Redémarrer tomcat seulement.
  • 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.
  • 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.

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