2010-02-25 5 views
0

Je me demande simplement quelle est la solution pour configurer SVN et le déployer sur un serveur externe avec juste les fichiers JSP et classe. Comment débarrasser le dossier src lors du déploiement. Quelle est la bonne mise en place pour cela. Je veux juste que plusieurs utilisateurs puissent travailler, y compris les fichiers src, mais quand ils sont déployés sur le serveur de production, je voudrais que la structure du fichier exclue le dossier src, les fichiers .project, .classpath, etc dont je n'ai pas besoin .SVN, Eclipse et Java

+2

Je ne suis pas sûr que vous posiez la bonne question. SVN n'est pas conçu comme une solution de déploiement. Vous utiliseriez normalement un outil de construction pour extraire votre projet de SVN, construire les artefacts d'application et les déployer. – ChrisH

Répondre

2

Ecrivez un script (j'utilise ant pour de tels projets java) qui promeut/copie dans votre environnement de production exactement ce que vous voulez.

Dans mon cas, les scripts de fourmis:

  1. Créez un répertoire tmp,
  2. Copie des fichiers spécifiques des arbres source dans la nouvelle structure de fichiers (souvent exactement les mêmes que la source, tout simplement pas dans les dossiers source et hors svn et autres fichiers que je ne voudrais pas (.java fichiers plutôt que des fichiers .class ou des pots, etc.)
  3. Compile et jarres ce qui est nécessaire
  4. Est-ce que la recherche/remplacement dans les fichiers de configuration (autoriser déploiement mise en scène, dev, qa ou des environnements de production qui peuvent différer
  5. Zips la __gVirt_NP_NN_NNPS<__ chose entière et les copies (scp) au serveur cible si distant
  6. Arrête toutes les applications existantes en cours d'exécution
  7. décompresse la nouvelle version
  8. Démarre la nouvelle application

J'ai, sur certains projets, des options pour télécharger uniquement des fichiers modifiés plutôt que redéployer des applications entières, mais c'est un choix de conception que vous aurez à faire vous-même. Pour les projets plus importants sur lesquels j'ai travaillé, je suis tombé sur le déploiement du projet entier pour chaque mise à jour plutôt que sur la copie de fichiers/modifications individuels sur le serveur. De cette façon, je peux assurer l'intégrité du processus de construction et de l'environnement de production sans avoir à craindre que les fichiers aléatoires ne soient pas synchronisés avec le reste du projet.

Généralement pour tout autre projet que simple, vous aurez besoin d'un vrai environnement de création/construction ... que vous devrez vous-même écrire.

Ant

Maven

scripts shell

font

tous sont des solutions possibles.

<!-- **************** USAGE (DEFAULT) --> 
<target name="usage"> 
    <!-- echo detailed usage instructions here --> 
</target> 


<!-- ************************************************** --> 
<!-- ******************* WAS 4.0 WORKER TARGETS --> 
<target name="init" depends="validenvironment"> 
    <tstamp/> 
    <echo>Build of ${ant.project.name} started at ${TSTAMP} on ${TODAY} </echo> 

</target> 

<target name="inittomcat"> 
    <delete dir="tomcatdeploy" /> 
    <mkdir dir="tomcatdeploy" /> 
</target> 
<target name="initapache"> 
    <delete dir="apacheconfig" /> 
    <mkdir dir="apacheconfig" /> 
</target> 

<!-- validates that you've specified an environment (production, dev, staging etc.) from an allowed list --> 
<target name="validenvironment"> 
    <condition property="valid.environment"> 
     <or> 
      <equals arg1="${penvironment}" arg2="dev" /> 
      <equals arg1="${penvironment}" arg2="qa" /> 
      <equals arg1="${penvironment}" arg2="staging" /> 
      <equals arg1="${penvironment}" arg2="prod" /> 
     </or> 
    </condition> 
    <fail message="Invalid target ${penvironment}." unless="valid.environment" /> 
</target> 

<!-- validates that you've specified a target server to deploy to. Only checks to see if the propery is set, not actual values --> 
<target name="validserver"> 
    <condition property="valid.server"> 
     <isset property="pserver" /> 
    </condition> 
    <fail message="Invalid server ${pserver}. You must specifiy a server for this target." unless="valid.server" /> 
</target> 

<target name="initwar"> 
    <delete dir="tmp/war" /> 
    <mkdir dir="tmp/war" /> 
    <mkdir dir="tmp/war/WEB-INF" /> 
    <mkdir dir="tmp/war/WEB-INF/classes" /> 
    <mkdir dir="tmp/war/WEB-INF/lib" /> 
    <mkdir dir="tmp/war/tags" /> 
    <mkdir dir="tmp/war/images" /> 
    <mkdir dir="tmp/war/javascript" /> 
    <mkdir dir="tmp/war/html" /> 
    <mkdir dir="tmp/war/components" /> 
</target> 

<target name="war" depends="initwar" if="penvironment"> 
    <echo>Compiling source files...</echo> 

    <ant antfile="build.xml" dir="classes/" target="compile" inheritAll="false" > 
     <property name="penvironment" value="${penvironment}" /> 
    </ant> 

    <echo>Compile done.</echo> 

    <copy todir="tmp/war/WEB-INF/classes" preservelastmodified="true" > 
     <fileset dir="classes/build" includes="**/*.class" /> 
    </copy> 
    <copy todir="tmp/war/WEB-INF/controller_jsp" preservelastmodified="true" > 
     <fileset dir="controller" includes="**/*.*" /> 
    </copy> 
    <copy todir="tmp/war/WEB-INF" preservelastmodified="true" > 
     <fileset dir="build" includes="**/*.xsl" /> 
    </copy> 
    <copy todir="tmp/war/WEB-INF/lib" preservelastmodified="true" > 
     <fileset dir="build/lib${penv}" includes="**/*.*" /> 
    </copy> 
    <copy todir="tmp/war/html" preservelastmodified="true" > 
     <fileset dir="html" includes="**/*.*" /> 
    </copy> 
    <copy todir="tmp/war/components" preservelastmodified="true" > 
     <fileset dir="components" includes="**/*.*" /> 
    </copy> 
    <copy todir="tmp/war/" preservelastmodified="true" > 
     <fileset dir="root" includes="**/*.*" /> 
    </copy> 
    <copy todir="tmp/war/pages" preservelastmodified="true" > 
     <fileset dir="pages" includes="**/*.*" /> 
    </copy> 
    <copy todir="tmp/war/tags" preservelastmodified="true" > 
     <fileset dir="tags" includes="**/*.*" /> 
    </copy> 
    <copy todir="tmp/war/images" preservelastmodified="true" > 
     <fileset dir="images" includes="**/*.*" /> 
    </copy> 
    <copy todir="tmp/war/javascript" preservelastmodified="true" > 
     <fileset dir="javascript" includes="**/*.*" /> 
    </copy> 

    <!-- copy the web.xml for the target environment into the temp war directory --> 
    <copy tofile="tmp/war/WEB-INF/web.xml" file="xonfig/$penvironment}.web.xml" preservelastmodified="true" > 
    </copy> 
    <!-- now replace all properties in the web.xml file with their values from ${penvironment}.properties --> 
    <echo>Replacing all properties in the web.xml file with their values from ${penvironment}.properties</echo> 
    <replace 
     file="tmp/war/WEB-INF/web.xml" 
     propertyFile="config/${penvironment}.properties"> 
     <replacefilter token="%%HOSTNAME%%" property="webxml.hostname" /> 
    </replace> 

    <copy tofile="tmp/war/WEB-INF/application.properties" file="config/application.properties" preservelastmodified="true" > 
    </copy> 
    <!-- now replace all properties in the application.properties file with their values from ${penvironment}.properties --> 
    <echo>Replacing all properties in the crm.properties file with their values from ${penvironment}.properties</echo> 
    <replace 
     encoding="ISO-8859-1" 
     file="tmp/war/WEB-INF/application.properties" 
     propertyFile="build/${penvironment}.properties"> 
     <replacefilter token="%%HOSTNAME%%" property="hostname" /> 
     <replacefilter token="%%EMAILADDRESS%%" property="emailaddress" /> 
     <replacefilter token="%%LOGFILE%%" property="logfile" /> 
     <replacefilter token="%%LOGLEVEL%%" property="loglevel" /> 
     <replacefilter token="%%DEFAULTPAGE%%" property="defaultpage" /> 
     <replacefilter token="%%MAILSERVER%%" property="mailserver" /> 
     <replacefilter token="%%SUPPORTEDLANGUAGES%%" property="supportedlanguages" /> 
     <replacefilter token="%%LDAPHOST%%" property="ldaphost" /> 
     <replacefilter token="%%LDAPHOSTBACKUP%%" property="ldaphostbackup" /> 
     <replacefilter token="%%LDAPPORT%%" property="ldapport" /> 
     <replacefilter token="%%LDAPVER%%" property="ldapver" /> 
     <replacefilter token="%%LDAPDC%%" property="ldapdc" /> 
     <replacefilter token="%%LDAPPW%%" property="ldappw" /> 
     <replacefilter token="%%LDAPUSERDC%%" property="ldapuserdc" /> 
     <replacefilter token="%%LDAPSEARCH%%" property="ldapsearch" /> 
     <replacefilter token="%%DATASCHEMA%%" property="dataschema" /> 

    </replace>  

    <copy tofile="tmp/war/WEB-INF/navigation.properties" file="config/${penvironment}.maxnavigation.properties" preservelastmodified="true" > 
    </copy> 

    <copy todir="tmp/war/WEB-INF" preservelastmodified="true" > 
     <fileset dir="config/bundle" includes="**/*.*" /> 
    </copy> 

    <!-- Create war file NOT USED right now as we're building this directly into the tomcat directory--> 
    <!--jar jarfile="tmp/${penvironment}.war" basedir="tmp/war" --> 
</target> 

<target name="buildtomcat" depends="war,inittomcat,validenvironment" if="penvironment">   
    <mkdir dir="tmp/tomcatdeploy/${penvironment}" /> 
    <delete> 
     <fileset dir="tomcat/6.x/logs" includes="**/*.log"/> 
    </delete> 
    <copy todir="tmp/tomcatdeploy/${penvironment}/tomcat" preservelastmodified="true" > 
     <fileset dir="tomcat/6.x" includes="**/*.*" /> 
    </copy> 
    <mkdir dir="tmp/tomcatdeploy/${ppenvironment}/tomcat/logs" /> 
    <mkdir dir="tmp/tomcatdeploy/${penvironment}/tomcat/webapps/${tomcat.contextroot}" /> 
    <copy todir="tmp/tomcatdeploy/${penvironment}/tomcat/webapps/${tomcat.contextroot}" preservelastmodified="true" > 
     <fileset dir="tmp/war" includes="**/*.*" /> 
    </copy> 

    <!-- now copy the tomcat config files --> 
    <copy tofile="tmp/tomcatdeploy/${penvironment}/tomcat/conf/context.xml" overwrite="true" file="config/context.xml" preservelastmodified="true" > 
    </copy> 
    <!-- now replace all variables in context.xml --> 
    <replace 
     encoding="ISO-8859-1" 
     file="tmp/tomcatdeploy/${penvironment}/tomcat/conf/context.xml" 
     token="%%JDBCNAME%%" value="${context.jdbcname}" /> 
    <replace 
     encoding="ISO-8859-1" 
     file="tmp/tomcatdeploy/${penvironment}/tomcat/conf/context.xml" 
     token="%%JDBCUSER%%" value="${context.jdbcuser}" /> 
    <replace 
     encoding="ISO-8859-1" 
     file="tmp/tomcatdeploy/${penvironment}/tomcat/conf/context.xml" 
     token="%%JDBCPASSWORD%%" value="${context.jdbcpassword}" /> 
    <replace 
     encoding="ISO-8859-1" 
     file="tmp/tomcatdeploy/${penvironment}/tomcat/conf/context.xml" 
     token="%%JDBCDRIVER%%" value="${context.jdbcdriver}" /> 
    <replace 
     encoding="ISO-8859-1" 
     file="tmp/tomcatdeploy/${penvironment}/tomcat/conf/context.xml" 
     token="%%JDBCURL%%" value="${context.jdbcurl}" /> 
    <!-- now replace all variables/ports in server.xml --> 
    <copy tofile="tmp/tomcatdeploy/${penvironment}/tomcat/conf/server.xml" overwrite="true" file="config/server.xml" preservelastmodified="true" > 
    </copy> 
    <!-- deleted for this example --> 

    <!-- END replace all variables/ports in server.xml --> 
    <!-- Now, replace CONTEXT in catalina.sh and catalina.bat --> 
    <replace 
     encoding="ISO-8859-1" 
     file="tmp/tomcatdeploy/${penvironment}/tomcat/bin/catalina.sh" 
     propertyFile="/config/${penvironment}.properties"> 
     <replacefilter token="%%CONTEXT%%" property="tomcat.contextroot" /> 
    </replace> 
    <replace 
     encoding="ISO-8859-1" 
     file="tmp/tomcatdeploy/${penvironment}/tomcat/bin/catalina.bat" 
     propertyFile="/config/${penvironment}.properties"> 
     <replacefilter token="%%CONTEXT%%" property="tomcat.contextroot" /> 
    </replace> 
</target> 

<target name="deployfullapplication" depends="validenvironment,validserver" > 
    <antcall target="deploytomcat" /> 
    <antcall target="deployapacheconfig" /> 
    <antcall target="restartapache" /> 
</target> 

<target name="deploytomcat" depends="buildtomcat" > 

    <!-- zip the tomcatdeploy directoyr up --> 
    <zip destfile="tmp/${penvironment}.zip" basedir="tmp/tomcatdeploy" /> 
    <!-- now scp to the server --> 
    <echo>Copying "tmp/${penvironment}.zip" to "${webuser}@${pserver}:/opt/www"</echo> 
    <scp remoteToDir="${webuser}@${pserver}:/opt/www" file="tmp/${penvironment}.zip" verbose="true" failonerror="true" trust="true"> 
    </scp>  

    <!-- now kill existing process on the server --> 
     <antcall target="stoptomcat" /> 
    <!-- now archive the existing deployed application on the server to ${penvironment}.${currenttimestamp} --> 
     <antcall target="archivetomcat" /> 
    <!-- now uncompress the zipped archive into the deployed location /opt/www/${penvironment} --> 
     <antcall target="unzipremotetomcat" /> 
    <!-- now start the application --> 
     <antcall target="starttomcat" /> 
    <!-- cool. thats it. good job. --> 

    <!-- all the remote tasks have been deleted in this example.... just to get the idea of what to do. --> 
</target> 

<target name="restarttomcat" depends="validenvironment,validserver" > 
    <antcall target="stoptomcat"/> 
    <antcall target="starttomcat"/> 
</target> 

<target name="starttomcat" unless="pnostart" if="pserver" depends="validenvironment,validserver"> 
    <!-- all the remote tasks have been deleted in this example.... just to get the idea of what to do. --> 
</target> 

<target name="unzipremotetomcat" if="pserver" depends="validenvironment,validserver"> 
    <!-- all the remote tasks have been deleted in this example.... just to get the idea of what to do. --> 
</target> 

<target name="archivetomcat" if="pserver" depends="validenvironment,validserver"> 
    <!-- all the remote tasks have been deleted in this example.... just to get the idea of what to do. --> 
</target> 

<target name="stoptomcat" unless="pnokill" if="pserver" depends="validenvironment,validserver"> 
    <!-- all the remote tasks have been deleted in this example.... just to get the idea of what to do. --> 
</target> 

<target name="killtomcatprocessonecall" depends="validenvironment,validserver"> 
    <!-- all the remote tasks have been deleted in this example.... just to get the idea of what to do. --> 
</target> 


<target name="restartapache" depends="validenvironment,validserver" > 
    <!-- all the remote tasks have been deleted in this example.... just to get the idea of what to do. --> 
</target> 

<target name="deployapacheconfig" depends="configapache,validserver"> 
    <!-- all the remote tasks have been deleted in this example.... just to get the idea of what to do. --> 
</target> 

<target name="configapache" if="penv" depends="init,validenvironment"> 
    <mkdir dir="tmp/apacheconfig" /> 
    <mkdir dir="tmp/apacheconfig/vhosts.d" /> 
    <mkdir dir="tmp/apacheconfig/ssl.crt" /> 
    <mkdir dir="tmp/apacheconfig/ssl.key" /> 
    <mkdir dir="tmp/apacheconfig/extra" /> 
    <mkdir dir="tmp/apacheconfig/passwords" /> 

    <echo>Copying http base config files...</echo> 
    <copy tofile="tmp/apacheconfig/vhosts.d/${penvironment}.conf" file="config/apache/vhosts/http.conf" preservelastmodified="true" /> 

    <echo>http only replace in http config file...</echo> 
    <replace 
     encoding="ISO-8859-1" 
     file="tmp/apacheconfig/vhosts.d/${penvironment}.conf" 
     propertyFile="config/${penvironment}.properties"> 
     <replacefilter token="%%SERVERADMIN%%" property="httpd.serveradmin" /> 
     <replacefilter token="%%LOGFILE%%" property="httpd.logfile" /> 
     <replacefilter token="%%HOSTNAME%%" property="httpd.hostname" /> 
     <replacefilter token="%%ROOT%%"  property="httpd.root" /> 
     <replacefilter token="%%HOSTIP%%" value="*" /> 
     <replacefilter token="%%PORT%%"  value="80" /> 
     <replacefilter token="%%PROTOCOL%%" value="http" /> 
     <replacefilter token="%%SSL%%"  value="off" /> 
     <replacefilter token="%%SSLCERT%%" value="" /> 
     <replacefilter token="%%SSLKEY%%" value="" /> 
     <replacefilter token="%%SSLCACERT%%" value="" /> 
     <replacefilter token="%%CONTEXTROOT%%" property="tomcat.contextroot" /> 
     <replacefilter token="%%AJPPORT%%" property="port.ajp13" /> 
     <replacefilter token="%%DEFAULTPAGE%%" property="http.defaultpage" /> 
     <replacefilter token="%%ERRORPAGE%%" property="http.errorpage" /> 
    </replace> 
    <condition property="dossl"> 
     <and> 
      <isset property="${penvironment}.ssl.ip" /> 
     </and> 
    </condition> 

    <antcall target="apachessl" /> 

</target> 

<target name="apachessl" if="dossl"> 

    <copy tofile="tmp/apacheconfig/vhosts.d/${penvironment}.s.conf" file="apache/vhosts/http.conf" preservelastmodified="true" /> 

    <echo>https only replace in https config file...</echo> 
    <replace 
     encoding="ISO-8859-1" 
     file="tmp/apacheconfig/vhosts.d/${penvironment}.s.conf" 
     propertyFile="config/${penvironment}.properties"> 
     <replacefilter token="%%SERVERADMIN%%" property="httpd.serveradmin" /> 
     <replacefilter token="%%LOGFILE%%" property="httpd.logfile" /> 
     <replacefilter token="%%HOSTNAME%%" property="httpd.hostname" /> 
     <replacefilter token="%%ROOT%%"  property="httpd.root" /> 
     <replacefilter token="%%PORT%%"  value="443" /> 
     <replacefilter token="%%PROTOCOL%%" value="https" /> 
     <replacefilter token="%%SSL%%"  property="httpd.ssl" /> 
     <replacefilter token="%%SSLCERT%%" property="https.sslcert" /> 
     <replacefilter token="%%SSLKEY%%" property="https.sslkey" /> 
     <replacefilter token="%%SSLCACERT%%" property="https.sslcacert" /> 
     <replacefilter token="%%CONTEXTROOT%%" property="tomcat.contextroot" /> 
     <replacefilter token="%%AJPPORT%%" property="port.ajp13" /> 
     <replacefilter token="%%JKWORKER%%" property="tomcat.jkworker" /> 
     <replacefilter token="%%DEFAULTPAGE%%" property="http.defaultpage" /> 
     <replacefilter token="%%ERRORPAGE%%" property="http.errorpage" /> 
    </replace> 
    <copy tofile="tmp/apacheconfig/ssl.crt/${penvironment}.cert" file="config/apache/ssl.crt/${penvironment}.cert" failonerror="false" preservelastmodified="true" /> 
    <copy tofile="tmp/apacheconfig/ssl.crt/verisign.intermediate.cert" file="config/apache/ssl.crt/verisign.intermediate.cert" failonerror="false" preservelastmodified="true" /> 
    <copy tofile="tmp/apacheconfig/ssl.crt/network.solutions.ca.cert" file="config/apache/ssl.crt/network.solutions.ca.cert" failonerror="false" preservelastmodified="true" /> 
    <copy tofile="tmp/apacheconfig/ssl.key/${penvironment}.key" file="config/apache/ssl.key/${penvironment}.key" failonerror="false" preservelastmodified="true" /> 
</target> 

+0

Pouvez-vous poster ce script ant seulement pour que je puisse voir la procédure. Merci pour la réponse affichée. Je me demandais simplement comment svn entre en jeu avec ça. – kbrin80

+0

Bien sûr .... Je vais l'ajouter à la réponse. Je vais devoir modifier fortement un existant que j'utilise pour y tenir. Cela peut ne pas fonctionner comme édité, mais vous montrera l'idée générale. – SuperMagic

1

Une solution simple serait de créer un fichier de construction Ant qui peut construire la source, et emballer tout JSPs en un fichier .war qui peut ensuite être déployé dans votre serveur d'applications.

Si vous souhaitez utiliser une solution Eclipse uniquement, regardez la création de votre projet à l'aide du modèle de projet "Dynamic Web Project". Cela devrait permettre à Eclipse de mettre en forme votre projet sous la forme d'un fichier .war que vous pourrez ensuite déployer.Je crois qu'Eclipse vous permet également de configurer un serveur d'applications qu'il peut ensuite utiliser pour déployer votre projet (personnellement, je n'ai jamais essayé cela).

Si je devais choisir, j'irais avec un fichier de construction Ant, parce que c'est moins de travail futur si vous décidez de passer à des builds continus/automatisés.