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. |
To begin, you'll need to create a "logs/appfuse" directory in the "appfuse-cc" directory and you'll also need to run "ant" to run everything manually once. I'd love to automate these steps, but I couldn't figure out how. |
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 used Cygwin to run cruise.sh. You'll likely need to change paths in the above files to match your system. |
3. Modify config.xml for your e-mail address and project name. |
At line 23 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. It just sits at: |
4. Modify build.xml so it points to your CVS server and project. |
At line 25 changed 2 lines. |
{{{BUILD SUCCESSFUL |
Total time: 3 minutes 39 seconds}}} |
5. Run "ant" in the current directory or checkout your project into the "projects". |
At line 28 changed 1 line. |
... for hours ... |
6. Run cruisecontrol.bat (Windows) or cruisecontrol.sh (Unix). |
At line 30 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). |
%%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. |