|
Page Edited :
IVY :
A Release Process Based On Ivy
A Release Process Based On Ivy has been edited by david taylor (May 15, 2009). Content:
Purpose and Target AudienceThis attempts to provide a conceptual description of the release process, for anyone who wants or needs to know how the pieces all fit. OverviewThe release process compiles source code, archives the binaries into jars, collects the jars and associated resources, and assigns a unique identifier to the collection. It also runs tests and reports coverage. The diagram below provides a high-level view. Goals
Basic ConceptsCVS Repository Ivy Repository Module Release Install-instance FlowThis is an overview of the steps to release. Details are at Steps to Release to Testing 1. Determine the name of the module to be released, the name of the release, and the name of the branch (if not releasing from the main codeline).For example:
or:
2. Login to build machine and execute script to create a release (the Release Builder bubble in the diagram above).This will:
3. Once a release has been created, an instance of it can be created in any environment: test, UAT, or prod.To install an instance of a release (called an Install Instance in the diagram above), login to the target machine and execute the install script for that module. This will checkout scripts, retrieve the release artifacts from the Ivy repository, and record data about the install instance in the Ivy repository. Update releasesIn the standard release process we rebuild the module to be released, along with each dependent module that has changed since that module was last released. All rebuilds use the latest code checked in on the specified codeline. In some cases, it's useful to only update the module to be released, while keeping the dependent modules unchanged. For example if a problem is found late in testing, and the fix and its effect are limited to the module to be released, then to minimize retesting we would like to be sure that the fix is the only change we introduce. An update release is created in the same way as the standard release, with the same of flow of events, but dependencies are statically bound rather than dynamically set to the latest version available. Details are in the section Creating an Update Release at Steps to Release to Testing Preparation: The integration processTo smooth the transition from the development environment to the testing and production environments, developers use an integration process that is very similar to the release process: In this process an instance of a module is called an integration. In the development process, integrations play the same role that releases play in the release process but integrations are lightweight. They are designed for quick deployment, not traceability. Integrations lack name, number, report, and tag. Also, they do not retain information on builder, date/time built (although that is encoded in version), or installed instances. CruiseControl software creates integrations continuously, as files are checked in. For More InformationIf you must actually create a release, then you will need to follow the instructions given in Steps to Release to Testing Purpose and ScopeThe release process compiles source code, archives the binaries into jars, collects the jars and associated resources, and assigns a unique identifier to the collection. It also runs tests and reports coverage. The release process aims to help:
This page provides an overview of the steps performed by the build system when a person performs the Steps to Release to Testing Stages of the Release Process1. Setup: Prepare environment and build system2. Recursive Release: Release main module and all the modules it depends on3. Install1. Setup: Prepare environment and build systemThis step ensures that: Build pre-conditions are satisfied1. Build initiated under designated JDK, on designated build server (currently JDK 1.5.0 on dev-tools2) Scripts used by build system are up-to-date (for correctness) and labeled (for repeatability):1. Release is assigned a version, independent of the release name: a timestamp, suffixed by -release (e.g. 20070604134307-release) Tools and properties used by build system are set up1. Ivy settings are declared Build started4. Module source is tagged, then checked out of CVS repository using the tag 2. Recursive Release: Release main module and all the modules it depends onResolve main module dependenciesDownload from ivy repository all jars and other artifacts declared (in Ivy file) as dependencies needed to compile, test, or deploy main module. Put them in the ivy cache. Deliver a resolved ivy file of the current module, and possibly do recursive delivery of dependencies1. Generate a resolved ivy file, with dynamic revisions replaced by the static ones that have been found during the resolve step, so the ivy file can be used later to obtain the same versions of artifacts it depends on. 2. Trigger the recursive release process, using the resolved ivy file, because the module may have dependencies which need to be released. InstallCheckout bootstrap script for install and invoke it, passing it the module name, version, branch, and instance (if instance=test). Upon completion of install, copy release metadata to Ivy repository.These files are generated by build. Bootstrap: Check install host, set CVS options, load release metadata, start install of moduleInstall module:1. Checkout module 2. Note: 2a, 2b, and 2c are interleaved (not sequential) 2a. Perform steps common to all installs
2b. Perform install steps specific to this category
2c. Perform install steps specific to this module |
Unsubscribe or edit your notifications preferences
