Continuous Integration

From CDOT Wiki
Revision as of 21:41, 8 April 2011 by Minooz (talk | contribs) (Challenges)
Jump to: navigation, search

Continuous Integration Project for NexJ Express Code

Project goal

Currently, NexJ has a Mercurial Repository (Internal) in which, the NexJ Express Server (Core) code is maintained with all its histories. NexJ is planning to share a Core Repository with the Open Source Community by creating a Repository (External) that will be kept in sync with the Internal Repository.

Current Status: Project Completed


Project Phases

Phase 1: Design Proposal (Done)

  • Get requirements from NexJ
  • Incorporate requirements from NexJ into Design of algorithm for syncing repositories
  • Provide the proposal for review and approved - final version of proposal

Phase 2: Creating Similar Environment (Done)

  • Internal Repository
    • Creating a Mercurial repository and adding some changes to it to grow the history of it.
  • Controller
    • This will be containing temporary repositories as the result of scripting.
  • External Repository
    • Creating another Mercurial repository using 'hg' commands from the latest 'change-set' of Internal Repository.

Phase 3: Scripting (Done)

  • Ant
    • Doesn't support some of non-regular Mercurial commands that we need to play with change-sets
  • Bash
    • Supports everything we need for the project. script

Phase 4: Running the script on CI system (Done)

  • Buildbot
  • Hudson
    • Simple to setup and configure.
    • Runs different types of scripts: bash, ant, batch
    • Can be scheduled to run automatically or manually
    • Test Project

Phase 5: Code Review (Done)

  • Execute the script on one of Nexj computers.

Phase 6: Make Changes as per Code Review (Done)

  • Define paths based on Nexj's requirements
  • Modify the script to be able to retrieve change-sets of a remote repository
  • Create specific error message for each problem during running the script

Phase 7: Code Review (Done)

Challenges

Resources

Continuous Integration System

  1. Hudson
  2. Cruise Control
  3. Buildbot
  4. Apache Continuum
  5. Maven
  6. Anthill

Version Control Tool

  1. Mercurial
  2. CVS
  3. SVN
  4. Git

Scripting

A new ant script is created e.g. buildHudson.xml that triggers the target(assign1.test) of main build file(build.xml) of the project. See below:
<project name="assign1" basedir="." default="myTarget">
  <target name="assign1.build.call">
    <!-- Call the target that does everything -->
    <ant antfile="build.xml" target="assign1.test"/>
   </target>
  <target name="myTarget.check" depends="assign1.build.call">
    <echo>The assign1.build was called!</echo>
  </target>
</project>