Hudson

From KevinWiki

(Difference between revisions)
Jump to: navigation, search
Line 48: Line 48:
       ... Default Host Info ...
       ... Default Host Info ...
-
       <Host name="hudson.yourdomain.com" appBase="/opt/hudson_home/webapps"
+
       <Host name="hudson.yourdomain.com" appBase="/opt/tomcat_user_dir/hudson_webapps"
             unpackWARs="true" autoDeploy="true"
             unpackWARs="true" autoDeploy="true"
             xmlValidation="false" xmlNamespaceAware="false">
             xmlValidation="false" xmlNamespaceAware="false">
Line 56: Line 56:
* If the virtual host is for Hudson only (e.g. http://hudson.yourdomain.com),
* If the virtual host is for Hudson only (e.g. http://hudson.yourdomain.com),
-
# Remove all the files and directories in the <code>appBase</code> directory which is, in the example above, <code>/opt/hudson_home/webapps</code>.
+
# Remove all the files and directories in the <code>appBase</code> directory which is, in the example above, <code>/opt/tomcat_user_dir/hudson_webapps</code>.
# Copy <code>hudson.war</code> file to the <code>appBase</code> directory and change <code>hudson.war</code> to <code>ROOT.war</code>.
# Copy <code>hudson.war</code> file to the <code>appBase</code> directory and change <code>hudson.war</code> to <code>ROOT.war</code>.
Line 81: Line 81:
       ... Default Host Info ...
       ... Default Host Info ...
-
       <Host name="hudson.yourdomain.com" appBase="/opt/hudson_home/webapps"
+
       <Host name="hudson.yourdomain.com" appBase="/opt/tomcat_user_dir/hudson_webapps"
             unpackWARs="true" autoDeploy="true"
             unpackWARs="true" autoDeploy="true"
             xmlValidation="false" xmlNamespaceAware="false">
             xmlValidation="false" xmlNamespaceAware="false">
Line 90: Line 90:
</source>
</source>
* To solve this problem, as mentioned already (Read the instructions to <code>Use Subdomain to Access Hudson (with SSL)</code>),
* To solve this problem, as mentioned already (Read the instructions to <code>Use Subdomain to Access Hudson (with SSL)</code>),
-
# Remove all the files and directories in the <code>appBase</code> directory which is, in the example above, <code>/opt/hudson_home/webapps</code>.
+
# Remove all the files and directories in the <code>appBase</code> directory which is, in the example above, <code>/opt/tomcat_user_dir/hudson_webapps</code>.
# Copy <code>hudson.war</code> file to the <code>appBase</code> directory and change <code>hudson.war</code> to <code>ROOT.war</code>.
# Copy <code>hudson.war</code> file to the <code>appBase</code> directory and change <code>hudson.war</code> to <code>ROOT.war</code>.
# Remove <code>Context</code> element in the <code>server.xml</code> file.
# Remove <code>Context</code> element in the <code>server.xml</code> file.

Revision as of 03:00, 12 July 2009


Hudson is a continuous integration tool built using Java. It can work as a standalone server since it has the Winstone Servlet Container or it can work on various Servlet Containers or JEE servers such as Apache Tomcat, Glassfish, JBoss, IBM WebSphere, Jetty 6, etc. Hudson supports Apache Ant and Maven as well as SCM tools such as CSV and Subversion.

Contents

Installation

  • Download the latest hudson from the hudson web site.
  • Deploy hudson.war file as a web application to Tomcat server.

Use Subdomain to Access Hudson (with SSL)

  • Install and enable mod_jk.
  • Open the workers.properties file in the /etc/apache2 directory.
  • Add a new worker for hudson.
workers.tomcat_home=/opt/tomcat
workers.java_home=/usr/lib/jvm/java-6-sun
ps=/
worker.list=worker1,hudson
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1
worker.hudson.port=8009
worker.hudson.host=hudson.yourdomain.com
worker.hudson.type=ajp13
worker.hudson.lbfactor=1
  • Set up JkMount in the apache virtual host configuration.
<VirtualHost *:443>
    ServerAdmin master@yourdomain.com

        SSLEngine on

        SSLOptions +StrictRequire

        SSLCertificateFile /etc/ssl/certs/server.crt
        SSLCertificateKeyFile /etc/ssl/private/server.key

    ServerName hudson.yourdomain.com

    JkMount / hudson
    JkMount /* hudson

</VirtualHost>
  • Open the $CATALINA_HOME/conf/server.xml file to set up a new tomcat virtual host for the hudson.
  • Add the virtual host info inside the Engine element.
    <Engine name="Catalina" defaultHost="localhost">
      ... Default Host Info ...
 
      <Host name="hudson.yourdomain.com" appBase="/opt/tomcat_user_dir/hudson_webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
      </Host>
    </Engine>
  1. Remove all the files and directories in the appBase directory which is, in the example above, /opt/tomcat_user_dir/hudson_webapps.
  2. Copy hudson.war file to the appBase directory and change hudson.war to ROOT.war.
  • Restart tomcat and apache.
$ /etc/init.d/tomcat stop 
$ /etc/init.d/tomcat start 
$ /etc/init.d/apache restart 

Known Problem

  • This problem will not happen if the instructions above are used to install Hudson.
  • If Hudson complains about two hudson instances using the same HUDSON_HOME with the following error message, stop the tomcat server and check $CATALINA_HOME/work directory and removes duplicate ones if found.
Hudson detected that you appear to be running more than one instance of Hudson that share the same home directory 
...
This greatly confuses Hudson and you will likely experience strange behaviors, so please correct the situation.
  • Check server.xml.
  • If the virtual host is only for Hudson and server.xml has the virtual host setup like below with hudson.war placed in the webapps directory, Tomcat server will create two instances (hudson and ROOT) of Hudson when it starts.
    <Engine name="Catalina" defaultHost="localhost">
      ... Default Host Info ...
 
      <Host name="hudson.yourdomain.com" appBase="/opt/tomcat_user_dir/hudson_webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
          <!-- WARNING: This is WRONG!!! -->
          <Context path="" docBase="hudson" debug="0" reloadable="true" />
      </Host>
    </Engine>
  • To solve this problem, as mentioned already (Read the instructions to Use Subdomain to Access Hudson (with SSL)),
  1. Remove all the files and directories in the appBase directory which is, in the example above, /opt/tomcat_user_dir/hudson_webapps.
  2. Copy hudson.war file to the appBase directory and change hudson.war to ROOT.war.
  3. Remove Context element in the server.xml file.


Configuration

  • To set the Tomcat to use UTF-8 to decode URLs, open $CATALINA_HOME/conf/server.xml file.
  • Add URIEncoding="UTF-8" to the following Connector element.
    <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
  • So it should be like this
    <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" 
               URIEncoding="UTF-8" />


  • If it uses mod_jk, add URIEncoding="UTF-8" to
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
  • So this should be
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"
               URIEncoding="UTF-8" />
  • Restart the tomcat server.
  • JkOptions +ForwardURICompatUnparsed option needs to be added to the /etc/apache2/mods-enabled/jk.load file or in the virtual host setup.
<VirtualHost *:443>
    ServerAdmin master@yourdomain.com

        SSLEngine on

        SSLOptions +StrictRequire

        SSLCertificateFile /etc/ssl/certs/server.crt
        SSLCertificateKeyFile /etc/ssl/private/server.key

    ServerName hudson.yourdomain.com

    JkOptions +ForwardURICompatUnparsed

    JkMount / hudson
    JkMount /* hudson

</VirtualHost>
  • Restart the apache server.
Personal tools