<?xml version="1.0" encoding="UTF-8"?>
<org.eclipse.epf.uma:ContentDescription xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:org.eclipse.epf.uma="http://www.eclipse.org/epf/uma/1.0.6/uma.ecore" xmlns:epf="http://www.eclipse.org/epf" epf:version="1.5.1" xmi:id="-DlaqJu4sEqMPk84qhJ6IEA" name="continuous_integration,_i8bUEL6cEdqti4GwqTkbsQ" guid="-DlaqJu4sEqMPk84qhJ6IEA" changeDate="2007-07-18T15:32:20.454+0330">
  <mainDescription>&lt;p>&#xD;
    Continuous integration is a software development practice that completely rebuilds and tests the application frequently&#xD;
    -- ideally, every time a change is introduced. This approach provides many benefits as outlined in &lt;a&#xD;
    class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/guidances/concepts/continuous_integration.html&quot;&#xD;
    guid=&quot;_B3xkEPD0EdqYgerqi84oCA&quot;>Concept: Continuous Integration&lt;/a> and in &lt;a class=&quot;elementLinkWithUserText&quot;&#xD;
    href=&quot;./../../../openup/guidances/supportingmaterials/references.html#WIKP-CI&quot;&#xD;
    guid=&quot;_9ToeIB83Edqsvps02rpOOg&quot;>[WIKP-CI]&lt;/a>.&#xD;
&lt;/p>&#xD;
&lt;h1>&#xD;
    Basic steps&#xD;
&lt;/h1>&#xD;
&lt;p>&#xD;
    The detailed application of continuous integration depends on which tools you use (configuration management system,&#xD;
    automated build tool, automated test tool, and so forth). However, these are the basic steps:&#xD;
&lt;/p>&#xD;
&lt;ol>&#xD;
    &lt;li>&#xD;
        A developer, let’s call her Jane, selects a&amp;nbsp;work item&amp;nbsp;to work on.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Jane updates her &lt;a class=&quot;elementLink&quot; href=&quot;./../../../openup/guidances/concepts/workspace.html&quot;&#xD;
        guid=&quot;_0cEmAMlgEdmt3adZL5Dmdw&quot;>Workspace&lt;/a> to include the most recent &lt;a class=&quot;elementLink&quot;&#xD;
        href=&quot;./../../../openup/workproducts/implementation.html&quot; guid=&quot;_0YoQcMlgEdmt3adZL5Dmdw&quot;>Implementation&lt;/a> from&#xD;
        the integration workspace.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Jane makes her changes in her workspace to both her developer tests and to the implementation, and then she tests&#xD;
        the changes.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Before committing the changes, Jane updates her workspace again (because other developers may have introduced&#xD;
        conflicting changes) and reruns her developer tests.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        If these tests are successful, the changes are promoted (see &lt;a class=&quot;elementLinkWithType&quot;&#xD;
        href=&quot;./../../../openup/guidances/guidelines/promoting_changes.html&quot; guid=&quot;_SM4YIL6dEdqti4GwqTkbsQ&quot;>Guideline:&#xD;
        Promoting Changes&lt;/a>) to&amp;nbsp;the&amp;nbsp;integration workspace.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        A complete &lt;a class=&quot;elementLink&quot; href=&quot;./../../../openup/workproducts/build.html&quot;&#xD;
        guid=&quot;_0YuXEMlgEdmt3adZL5Dmdw&quot;>Build&lt;/a> of the application is performed by using the implementation from the&#xD;
        integration workspace, and the entire suite of developer tests is run on this build.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        If any of these tests fail, the team is notified, and the failed test should be addressed as soon as possible.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        This process repeats as the team develops and continuously integrates and tests functionality in small increments.&#xD;
    &lt;/li>&#xD;
&lt;/ol>&#xD;
&lt;h1>&#xD;
    Constraints&#xD;
&lt;/h1>&#xD;
&lt;p>&#xD;
    Conceptually, continuous integration can be performed manually (see &lt;a class=&quot;elementLinkWithUserText&quot;&#xD;
    href=&quot;./../../../openup/guidances/supportingmaterials/references.html#SHO06&quot; guid=&quot;_9ToeIB83Edqsvps02rpOOg&quot;>[SHO06]&lt;/a>&#xD;
    for example). However, in practice, there are several constraints that must be respected for it to be effective:&#xD;
&lt;/p>&#xD;
&lt;ol>&#xD;
    &lt;li>&#xD;
        All changes must be introduced into a tested configuration that you know to be good.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        The integrate-build-test cycle must be fast enough so that it can be completed quickly and the team notified of the&#xD;
        results. Many published guidelines promote a 10-minute cycle.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Keep the &lt;a class=&quot;elementLink&quot; href=&quot;./../../../openup/guidances/concepts/change_set.html&quot;&#xD;
        guid=&quot;_1QU9MAIoEdyLh7vsrHZ4YA&quot;>Change Set&lt;/a>s&amp;nbsp;small enough so that the work can be completed and integration&#xD;
        performed several times per day. Many published guidelines promote a 2- to 4-hour cycle between integrations.&#xD;
    &lt;/li>&#xD;
&lt;/ol>&#xD;
&lt;p>&#xD;
    These constraints imply the need for a configuration management (CM) repository to maintain configuration information&#xD;
    (Item 1 listed previously), automated build and test tools to meet the turnaround constraints (Item 2), and proper&#xD;
    planning and discipline by developers to ensure that their work items and change sets are small enough to complete&#xD;
    quickly (Item 3).&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    For a more detailed description of continuous integration, see &lt;a class=&quot;elementLinkWithUserText&quot;&#xD;
    href=&quot;./../../../openup/guidances/supportingmaterials/references.html#FOW06&quot; guid=&quot;_9ToeIB83Edqsvps02rpOOg&quot;>[FOW06]&lt;/a>&#xD;
    or &lt;a class=&quot;elementLinkWithUserText&quot; href=&quot;./../../../openup/guidances/supportingmaterials/references.html#WIKP-CI&quot;&#xD;
    guid=&quot;_9ToeIB83Edqsvps02rpOOg&quot;>[WIKP-CI]&lt;/a>.&#xD;
&lt;/p></mainDescription>
</org.eclipse.epf.uma:ContentDescription>
