blob: bfcd91a29e361a097b6b65dd0180518995a10e20 [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.6/uma.ecore" xmlns:epf="http://www.eclipse.org/epf" epf:version="1.5.1" xmlns:rmc="http://www.ibm.com/rmc" rmc:version="7.5.1" xmi:id="-DlaqJu4sEqMPk84qhJ6IEA" name="continuous_integration,_i8bUEL6cEdqti4GwqTkbsQ" guid="-DlaqJu4sEqMPk84qhJ6IEA" changeDate="2008-05-28T07:33:07.000-0700" version="7.2.0">
<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&amp;nbsp;&lt;a&#xD;
class=&quot;elementLink&quot;&#xD;
href=&quot;./../../../practice.tech.continuous_integration.base/guidances/practices/continous_integration_58673D65.html&quot;&#xD;
guid=&quot;_rJNiMB4rEd2bS8fFOQ7WWA&quot;>Continuous Integration&lt;/a> and in &lt;a class=&quot;elementLinkWithUserText&quot;&#xD;
href=&quot;./../../../core.tech.common.base/guidances/supportingmaterials/references.tech_6CCF393.html#WIKP-CI&quot;&#xD;
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;&#xD;
href=&quot;./../../../practice.tech.continuous_integration.base/guidances/concepts/workspace_722BBA90.html&quot;&#xD;
guid=&quot;_0cEmAMlgEdmt3adZL5Dmdw&quot;>Workspace&lt;/a> to include the most recent &lt;a class=&quot;elementLink&quot;&#xD;
href=&quot;./../../../core.tech.slot.base/workproducts/technical_implementation_slot_E92F6A39.html&quot;&#xD;
guid=&quot;_Vux8UEfUEdyiPI8btkmvmw&quot;>[Technical Implementation]&lt;/a> from 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;./../../../practice.tech.continuous_integration.base/guidances/guidelines/promoting_changes_9087B764.html&quot;&#xD;
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;./../../../core.tech.common.extend_supp/workproducts/build_95D7D8FD.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;h3>&#xD;
Constraints&#xD;
&lt;/h3>&#xD;
&lt;p>&#xD;
Conceptually, continuous integration can be performed manually (see &lt;a class=&quot;elementLinkWithUserText&quot;&#xD;
href=&quot;./../../../core.tech.common.base/guidances/supportingmaterials/references.tech_6CCF393.html#SHO06&quot;&#xD;
guid=&quot;_9ToeIB83Edqsvps02rpOOg&quot;>[SHO06]&lt;/a> for example). However, in practice, there are several constraints that must&#xD;
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;&#xD;
href=&quot;./../../../core.mgmt.common.extend_supp/guidances/concepts/change_set_430BF233.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;./../../../core.tech.common.base/guidances/supportingmaterials/references.tech_6CCF393.html#FOW06&quot;&#xD;
guid=&quot;_9ToeIB83Edqsvps02rpOOg&quot;>[FOW06]&lt;/a> or &lt;a class=&quot;elementLinkWithUserText&quot;&#xD;
href=&quot;./../../../core.tech.common.base/guidances/supportingmaterials/references.tech_6CCF393.html#WIKP-CI&quot;&#xD;
guid=&quot;_9ToeIB83Edqsvps02rpOOg&quot;>[WIKP-CI]&lt;/a>.&#xD;
&lt;/p></mainDescription>
</org.eclipse.epf.uma:ContentDescription>