| At line 1 changed 1 line. |
| I tried several times to get [AppFuse] to work with [CruiseControl|http://cruisecontrol.sourceforge.net], but never got it to work. Rather than just throwing away my efforts, I figured I'd document them here in hopes that someone else might be able to figure out a solution. |
| It's pretty easy to setup your [AppFuse] application to work with [CruiseControl|http://cruisecontrol.sourceforge.net]. You can either download the files from this page or if you're using 1.6.1+ - they're located in the ''extras/cruisecontrol'' directory. Thanks to [Mike Clark|http://www.clarkware.com/cgi/blosxom] and [ Jared Richardson|http://www.pragmaticprogrammer.com/titles/prj/index.html] for their help getting this work. |
| At line 3 changed 1 line. |
| To setup automated builds with CruiseControl and AppFuse, you need to [download CruiseControl|http://sourceforge.net/project/showfiles.php?group_id=23523] (I used [2.2.rc3|http://prdownloads.sourceforge.net/cruisecontrol/cruisecontrol-2.2.rc3.zip?download]). Extract it to your $TOOLS_HOME directory, wherever that may be. I believe you have to build it too (with Ant). |
| <div class="note" style="margin: 5px">__NOTE:__ I recommend setting up CruiseControl on a Linux machine if you [have one available|http://www.clarkware.com/cgi/blosxom/2004/10/19#TheyNeedABuildMachine] |
| </div> |
| At line 5 changed 1 line. |
| After you've installed and built CruiseControl, create an "appfuse-cc" or similar directory next to your project directory. In my tests, I had: |
| To run CruiseControl on your AppFuse project, perform the following steps: |
| At line 7 changed 5 lines. |
| {{{ |
| c:\Source |
| c:\Source\appfuse |
| c:\Source\appfuse-cc |
| }}} |
| 1. [Download|http://cruisecontrol.sourceforge.net/download.html] and install CruiseControl 2.4.1. Extract it to your $TOOLS_HOME directory, wherever that may be. |
| At line 13 changed 1 line. |
| Download the following files and put them in the "appfuse-cc" directory: |
| 2. After you've installed CruiseControl, download the following files and put them in the cruisecontrol-2.4.1 ($CC_HOME) directory. |
| At line 17 removed 1 line. |
| * [cruise.sh] |
| At line 19 changed 1 line. |
| I used Cygwin to run cruise.sh. You'll likely need to change paths in the above files to match your system. |
| The latest version of these files can be found [in CVS|https://appfuse.dev.java.net/source/browse/appfuse/extras/cruisecontrol] or in your project's ''extras/cruisecontrol'' directory. |
| At line 21 changed 1 line. |
| I experienced many issues in the process of trying to get this to work. You can't use the simple [<ant>|http://cruisecontrol.sourceforge.net/main/configxml.html#ant] builder with AppFuse b/c it doesn't find all of the tasks (even though they're defined) in build.xml. To get around this, you have to use the [antscript attribute|http://confluence.public.thoughtworks.org/display/CC/AntScriptAttribute] - which works, but the process hangs after running all the tests. |
| 3. Modify config.xml for your e-mail address and project name. |
| At line 23 changed 1 line. |
| So this is where I'm at, everything works from a build/test perspective, but CC won't recover after running the antscript and just hangs. If I specify a timeout - it'll hit the timeout and then publish the results as failed (even though everything succeeded). |
| 4. Modify build.xml so it points to your CVS server and project. |
|
| 5. Run "ant" in the current directory or checkout your project into the "projects". |
|
| 6. Run cruisecontrol.bat (Windows) or cruisecontrol.sh (Unix). |
|
| %%note __NOTE:__ If you're using Subversion instead of CVS, [download svnant|http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=1731]. Extract the download into your ''work'' directory, delete everything but it's "lib" directory and adjust the path in build.xml accordingly.%% |
|
| I was puzzled why my HTML E-Mails didn't contain all the pretty formatting like Spring's does. Then I looked at their [latest archived one|http://article.gmane.org/gmane.comp.java.springframework.devel/6300] and noticed it looks the same on Gmane as it does in GMail. I'd recommend sending your build notifications to an e-mail account that can be read with a good HTML e-mail reader. |
|
| If you want to use CruiseControl to build your [Equinox|https://equinox.dev.java.net] project, that's in [Equinox's CVS|https://equinox.dev.java.net/source/browse/equinox/extras/cruisecontrol]. |
|
| !!Setup CruiseControl Daemon |
| After getting all the above working, I setup CruiseControl to run as a daemon. I has some issues with getting [these instructions|http://confluence.public.thoughtworks.org/display/CC/RunningCruiseControlFromUnixInit] working, so I [pinged the mailing list|http://www.nabble.com/forum/ViewPost.jtp?post=3195390&framed=y]. After a few back-and-forth e-mails, the following solution worked for me on Suse 10. |
|
| * Create an /etc/init.d/cruisecontrol script with the following script. Make sure and chmod +x /etc/init.d/cruisecontrol. |
| <div style="margin-left: 40px"> |
| {{{ |
| #!/bin/sh |
| #content of /opt/cruisecontrol/init script |
| # chkconfig: 345 99 05 |
| # description: CruiseControl build loop (see /home/tools) |
|
| # based on http://confluence.public.thoughtworks.org/display/CC/RunningCruiseControlFromUnixInit |
| # adapted for multiple projects |
|
| # |
| # Cruise Control startup: Startup and kill script for Cruise Control |
| # |
|
| PATH=/sbin:/usr/sbin:/usr/bin:/bin |
| export PATH |
|
| NAME=cruisecontrol |
| DESC="CruiseControl 2.2 continuous integration build loop" |
|
| CC_USER=mraible |
| CC_WORK_DIR=/opt/tools/cruisecontrol |
| CC_INSTALL_DIR=/opt/tools/cruisecontrol |
|
| CC_DAEMON=$CC_INSTALL_DIR/cruise.sh |
| CC_CONFIG_FILE=$CC_WORK_DIR/config.xml |
| CC_LOG_FILE=$CC_WORK_DIR/cruisecontrol.log |
| CC_PORT=8082 |
| CC_RMIPORT= |
| CC_COMMAND="$CC_DAEMON -configfile $CC_CONFIG_FILE -port $CC_PORT -rmiport $CC_RMIPORT" |
|
| # overwrite settings from default file |
| if [ -f /etc/default/cruisecontrol ]; then |
| . /etc/default/cruisecontrol |
| fi |
|
| test -f $CC_DAEMON || exit 0 |
|
| if [ `id -u` -ne 0 ]; then |
| echo "Not starting/stopping $DESC, you are not root." |
| exit 4 |
| fi |
|
| # PPID is read-only in my shell - GNU bash, version 2.05b.0(1)-release (i586-mandrake-linux-gnu) |
| PARPID=`ps -ea -o "pid ppid args" | grep -v grep | grep "${CC_DAEMON}" | sed -e 's/^ *//' -e 's/ .*//'` |
|
| if [ "${PARPID}" != "" ] |
| then |
| PID=`ps -ea -o "pid ppid args" | grep -v grep | grep java | grep "${PARPID}" | \ |
| sed -e 's/^ *//' -e 's/ .*//'` |
| fi |
|
| case "$1" in |
| |
| 'start') |
| # going into the work dir allows for use of relative PATHs in the config file |
| cd $CC_WORK_DIR |
| su $CC_USER -c "$CC_COMMAND >> $CC_LOG_FILE 2>&1" & RETVAL=$? |
| echo "$NAME started with jmx on port ${CC_PORT}" |
| ;; |
|
| 'stop') |
| if [ "${PID}" != "" ] |
| then |
| kill -9 ${PID} ${PARPID} |
| $0 status |
| RETVAL=$? |
| else |
| echo "$NAME is not running" |
| RETVAL=1 |
| fi |
| ;; |
|
| 'status') |
| # echo PARPIDs $PARPID |
| # echo PIDs $PID |
| kill -0 $PID >/dev/null 2>&1 |
| if [ "$?" = "0" ] |
| then |
| echo $NAME \(pids $PARPID $PID\) is running |
| RETVAL=0 |
| else |
| echo "$NAME is stopped" |
| RETVAL=1 |
| fi |
| ;; |
|
| 'restart') |
| $0 stop && $0 start |
| RETVAL=$? |
| ;; |
|
| *) |
| echo "Usage: $0 { start | stop | status | restart }" |
| exit 1 |
| ;; |
| esac |
| #echo ending $0 $$.... |
| exit 0; |
| }}} |
| </div> |
|
| That's it - you should be able to run /etc/init.d/cruisecontrol as root and CC will check for new updates every hour. |