blob: e36c684181dd6cb77b564441b7f1848f7040ad91 [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.4/uma.ecore"
xmlns:epf="http://www.eclipse.org/epf" epf:version="1.2.0" xmi:id="-DlaqJu4sEqMPk84qhJ6IEA"
name="continuous_integration,_i8bUEL6cEdqti4GwqTkbsQ" guid="-DlaqJu4sEqMPk84qhJ6IEA"
changeDate="2007-07-13T14:47:43.207-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&#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 (content management system, automated&#xD;
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 an 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-3.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 content management (CM) repository to maintain configuration information (Item 1&#xD;
listed previously), automated build and test tools to meet the turnaround constraints (Item 2), and proper planning and&#xD;
discipline by developers to ensure that their work items and change sets are small enough to complete 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>