blob: 4200a7599fa189fed764d695b10a9fde22dcac87 [file] [log] [blame]
<?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.5/uma.ecore"
xmlns:epf="http://www.eclipse.org/epf" epf:version="1.5.0" xmi:id="-DlaqJu4sEqMPk84qhJ6IEA"
name="continuous_integration,_i8bUEL6cEdqti4GwqTkbsQ" guid="-DlaqJu4sEqMPk84qhJ6IEA"
changeDate="2007-07-18T05:02:20.454-0700">
<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 class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/guidances/concepts/continuous_integration_87682D06.html&quot; guid=&quot;_B3xkEPD0EdqYgerqi84oCA&quot;>Concept: Continuous Integration&lt;/a> and in &lt;a class=&quot;elementLinkWithUserText&quot; href=&quot;./../../../openup/guidances/supportingmaterials/references_6CCF393.html#WIKP-CI&quot; guid=&quot;_9ToeIB83Edqsvps02rpOOg&quot;>[WIKP-CI]&lt;/a>.&#xD;
&lt;/p>&#xD;
&lt;h3>&#xD;
Basic steps&#xD;
&lt;/h3>&#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_722BBA90.html&quot; guid=&quot;_0cEmAMlgEdmt3adZL5Dmdw&quot;>Workspace&lt;/a> to include the most recent &lt;a class=&quot;elementLink&quot; href=&quot;./../../../openup/workproducts/implementation_917CA61E.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; href=&quot;./../../../openup/guidances/guidelines/promoting_changes_9087B764.html&quot; guid=&quot;_SM4YIL6dEdqti4GwqTkbsQ&quot;>Guideline: 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_95D7D8FD.html&quot; 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;h3>&#xD;
Constraints&#xD;
&lt;/h3>&#xD;
&lt;p>&#xD;
Conceptually, continuous integration can be performed manually (see &lt;a class=&quot;elementLinkWithUserText&quot; href=&quot;./../../../openup/guidances/supportingmaterials/references_6CCF393.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_430BF233.html&quot; 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; href=&quot;./../../../openup/guidances/supportingmaterials/references_6CCF393.html#FOW06&quot; guid=&quot;_9ToeIB83Edqsvps02rpOOg&quot;>[FOW06]&lt;/a>&#xD;
or &lt;a class=&quot;elementLinkWithUserText&quot; href=&quot;./../../../openup/guidances/supportingmaterials/references_6CCF393.html#WIKP-CI&quot; guid=&quot;_9ToeIB83Edqsvps02rpOOg&quot;>[WIKP-CI]&lt;/a>.&#xD;
&lt;/p></mainDescription>
</org.eclipse.epf.uma:ContentDescription>