Java – How to publish CruiseControl LATEST build artifacts to a static URL

continuous integrationcruisecontroldocumentationjavamaven-2

I have a Java multi-module Maven project that I want to build an MVN site and javadocs and have CruiseControl publish the latest daily builds to a configured static location.

The trouble is the CruiseControl artifactPublisher allows you to specify a dest directory but it is timestamped with the latest time of the last build. I want to be able to publish to a location that gets overridden on each build, such as:

http://cc-buildserver/cruisecontrol/artifacts/gameplatform-documentation/  

artifactPublisher documentation:

dir – will copy all files from this
directory

dest – parent directory of actual
destination directory; actual
destination directory name will be the
build timestamp.

subdirectory –
subdirectory under the unique
(timestamp) directory to contain
artifacts

For example if I have a CruiseControl project called gameplatform-documentation and I configure my artifactPublisher as such:

<project name="gameplatform-documentation" forceOnly="true" requireModification="false" forceBuildNewProject="false" buildafterfailed="false">
...
    <schedule>
        <composite time="2300">
            <maven2 
                 mvnhome="${mvn.home}" 
         pomfile="${dev.root}/gameplatform-parent/pom.xml"
                goal="site" />

        </composite>
    </schedule>

    <publishers>
        <artifactspublisher
            dir="${dev.root}/gameplatform-parent/target/site" 
    dest="artifacts/gameplatform-documentation" />
    </publishers>
</project>

I end up with my Maven generated site and javadocs in a different directory each build:

http://cc-buildserver/cruisecontrol/cruisecontrol/artifacts/gameplatform-documentation/20091110130202/

Maybe I need to use a custom AntPublisher or FTPPublisher and create another webserver to host the published docs. I could also use CC source control tools and checkin the documentation into our SVN server and use that to serve the documentation.

How can this be accomplished?

Best Answer

We ended up using Maven's site deploy plugin to publish the documentation artifacts through SCP (using cygwin SSHD server setup on Windows server) to our CruiseControl server's "artifact" folder:

<distributionManagement>
    <site>
        <id>dev.website</id>
        <url>scp://user@buildserver/cygdrive/c/Users/user/servers/cruisecontrol-project-2.8.3/artifacts/documentation/project/gameplatform</url> 
    </site>
</distributionManagement> 

Then we're able to access the nightly built documentation them by visiting:

http://buildserver:8081/cruisecontrol/artifacts/documentation/project/gameplatform
Related Topic