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)
- Send code for review.
- NexJ Express Repository in use
Challenges
Resources
Continuous Integration System
- Comparing Different CI Systems -> CI Feature Matrix
Version Control Tool
- Basic Tutorial @ http://hginit.com/
- comparing popular version control tools [1]
- Mercurial
- CVS
- SVN
- Git
Scripting
- 1- Ant
- 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>
- 2- Bash