<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7657409735507515078</id><updated>2011-07-08T10:04:34.370-07:00</updated><category term='Hudson'/><category term='CI'/><category term='Continuous Integration'/><category term='Hudson Install'/><category term='Promote stable code'/><category term='Openbravo'/><title type='text'>Tools Explorer</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://pmpearl.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7657409735507515078/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://pmpearl.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>priyam</name><uri>http://www.blogger.com/profile/09886609888883661912</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7657409735507515078.post-8137721799046169634</id><published>2010-08-29T23:31:00.000-07:00</published><updated>2010-08-31T02:15:31.069-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Openbravo'/><title type='text'>Automatic update of Openbravo datamodel documentation</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;a href="http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide/Database_Model"&gt;Database Model&lt;/a&gt; reference maintained for Openbravo ERP gives a complete overview of all tables and columns (and their relations).&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;One of the cool feature of this reference is the fact  that it is an active  written document that permits you to search the  Openbravo datas model  directly from the wiki, without the need to open  additional tools such  as PgAdmin.&lt;/span&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Tabular arrays are grouped in packages of  functionally tied in  entities; for illustration, all the tabular arrays  linked to invoices  are grouped in &lt;a id="link_1" href="http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide/Database_Model/org.openbravo.model.common.invoice" mce_href="http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide/Database_Model/org.openbravo.model.common.invoice"&gt;org.openbravo.theoretical account.common.bill&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;For each one table - for example &lt;a id="link_2" href="http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide/Database_Model/org.openbravo.model.common.invoice/C_Invoice" mce_href="http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide/Database_Model/org.openbravo.model.common.invoice/C_Invoice"&gt;C_INVOICE&lt;/a&gt; - incorporates a full description of all of its columns&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Columns being part of a foreign key - for example &lt;a id="link_3" href="http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide/Database_Model/org.openbravo.model.common.invoice/C_Invoice#Business_Partner" mce_href="http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide/Database_Model/org.openbravo.model.common.invoice/C_Invoice#Business_Partner"&gt;C_BPARTNER_ID&lt;/a&gt; on C_INVOICE, is a normal column and it is foreign key column to &lt;a href="http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide/Database_Model/org.openbravo.model.common.businesspartner/C_BPartner" title="ERP/2.50/Developers Guide/Database Model/org.openbravo.model.common.businesspartner/C BPartner"&gt;C_BPartner&lt;/a&gt; table&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Columns description - for instance &lt;a id="link_4" href="http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide/Database_Model/org.openbravo.model.common.invoice/C_Invoice#Validation_Rule:_C_BPartner_Location_-_Bill_To" mce_href="http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide/Database_Model/org.openbravo.model.common.invoice/C_Invoice#Validation_Rule:_C_BPartner_Location_-_Bill_To"&gt;PARTNER_ADDRESS&lt;/a&gt; &lt;/span&gt;&lt;span style="font-size:85%;"&gt;on C_INVOICE, gives information about it in the column description&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Columns linked to a callout - for example &lt;a id="link_5" href="http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide/Database_Model/org.openbravo.model.common.invoice/C_Invoice#Callout:_SL_Invoice_DocType" mce_href="http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide/Database_Model/org.openbravo.model.common.invoice/C_Invoice#Callout:_SL_Invoice_DocType"&gt;TRANSACTION_DOCUMENT&lt;/a&gt; on C_INVOICE -  provides a direct link to the java sourcecode implementing the callout.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;span style="font-size:85%;"&gt;This is a rattling valuable tool that can save hours of investigation   and increase the productivity of  many Openbravo developers. Take it  for  a spin.&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;This document on database model is updated automatically for every new MP. which is made possible by&lt;/span&gt;&lt;/p&gt; &lt;ol&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Openbravo ERP module &lt;a href="https://code.openbravo.com/erp/pmods/org.openbravo.utility.modelwikidoc" mce_href="https://code.openbravo.com/erp/pmods/org.openbravo.utility.modelwikidoc" target="_blank"&gt;org.openbravo.utility.modelwikidoc&lt;/a&gt;, which generates the entity model wiki page and its &lt;a href="http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide/Reference/Entity_Model" mce_href="http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide/Reference/Entity_Model" target="_blank"&gt;subpages&lt;/a&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://builds.openbravo.com/view/All/job/WikiDataModel" mce_href="http://builds.openbravo.com/view/All/job/WikiDataModel" target="_blank"&gt;Continuous Integration&lt;/a&gt;, which checks for new MP (mercurial tag) and execute the wikidatamodel generation process&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;span style="font-size:85%;"&gt;One can check updates in the data model using page history, example &lt;a href="http://tinyurl.com/25pgvov" mce_href="http://tinyurl.com/25pgvov" target="_blank"&gt;http://tinyurl.com/25pgvov&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;Reference: &lt;a href="http://vsadhx.livejournal.com/4967.html"&gt;http://vsadhx.livejournal.com/4967.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7657409735507515078-8137721799046169634?l=pmpearl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmpearl.blogspot.com/feeds/8137721799046169634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pmpearl.blogspot.com/2010/08/automatic-update-of-openbravo-datamodel.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7657409735507515078/posts/default/8137721799046169634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7657409735507515078/posts/default/8137721799046169634'/><link rel='alternate' type='text/html' href='http://pmpearl.blogspot.com/2010/08/automatic-update-of-openbravo-datamodel.html' title='Automatic update of Openbravo datamodel documentation'/><author><name>priyam</name><uri>http://www.blogger.com/profile/09886609888883661912</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7657409735507515078.post-4204077872311690644</id><published>2010-01-20T00:50:00.001-08:00</published><updated>2010-01-21T00:37:57.876-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Openbravo'/><title type='text'>RM Updates : 2.50MP10 released, Quickstart-spain OBX automated, User manual to setup testing environment for openbravoERP, Scrum master less sprint.</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;br /&gt;MaintancePack Release:&lt;/b&gt; &lt;a href="http://wiki.openbravo.com/wiki/ERP/2.50/Release_Notes/2.50MP10"&gt;2.50MP10&lt;/a&gt; is released. OBX and the update through the MMC is available exclusively for professional customers. The &lt;a href="http://wiki.openbravo.com/wiki/ERP/2.50/Release_Notes/2.50MP10#Download_Details"&gt;appliance&lt;/a&gt;, &lt;a href="http://wiki.openbravo.com/wiki/ERP/2.50/Release_Notes/2.50MP10#Download_Details"&gt;tarball&lt;/a&gt; are available for everyone.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Quickstart-spain OBX:&lt;/b&gt;  Created new &lt;a href="http://builds.openbravo.com/job/erp_devel_main-obquickstart-es/"&gt;job&lt;/a&gt; to build QuickStart-spain obx with this automation we are ensure better quality through all the development cycle, which leads to stable release dates and high quality in solution.&lt;/span&gt;&lt;span style="font-size:100%;"&gt; Latest obx is available &lt;a href="http://builds.openbravo.com/erp/quickstart.spain"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;User manual:&lt;/b&gt; Created &lt;a href="http://wiki.openbravo.com/wiki/Release_Management/Testing_environments/Production_to_testing_replication_tool_user_manual"&gt;guide&lt;/a&gt; on how to replicate the Openbravo ERP running in a production environment into a testing environment.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Scrum master less sprint:&lt;/span&gt; We successfully made this sprint with no scrum master, which means we shared the work of Scrum Master and we have two people from the team on rotation to represent Scrum-of-Scrum and ScrumMaster's meeting.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7657409735507515078-4204077872311690644?l=pmpearl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmpearl.blogspot.com/feeds/4204077872311690644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pmpearl.blogspot.com/2010/01/rm-updates-250mp10-released-quickstart.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7657409735507515078/posts/default/4204077872311690644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7657409735507515078/posts/default/4204077872311690644'/><link rel='alternate' type='text/html' href='http://pmpearl.blogspot.com/2010/01/rm-updates-250mp10-released-quickstart.html' title='RM Updates : 2.50MP10 released, Quickstart-spain OBX automated, User manual to setup testing environment for openbravoERP, Scrum master less sprint.'/><author><name>priyam</name><uri>http://www.blogger.com/profile/09886609888883661912</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7657409735507515078.post-2966950773502508760</id><published>2009-11-11T03:36:00.000-08:00</published><updated>2009-11-16T22:41:53.532-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Promote stable code'/><category scheme='http://www.blogger.com/atom/ns#' term='Openbravo'/><title type='text'>Automatic Promotion of stable code</title><content type='html'>&lt;span style="font-size:85%;"&gt;We are working to achieve automatic promotion of "good" revisions to main. First of all, what do we mean with "good"? Right now we measure this as a set of builds and tests that are run successfully on a specific code revision of &lt;a href="https://code.openbravo.com/erp/devel/pi"&gt;pi&lt;/a&gt;. When this happens then all the code up to that revision is selected to be promoted to the stable repository &lt;a href="https://code.openbravo.com/erp/devel/main"&gt;main&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Our goals:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="https://code.openbravo.com/erp/devel/main"&gt;Main&lt;/a&gt; only includes stable code.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Code is promoted from the development repositories to main as fast as possible. And as fast as the code quality permits it.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Current Model&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;We have &lt;a href="https://code.openbravo.com/erp/devel/pi"&gt;pi&lt;/a&gt;, &lt;a href="https://code.openbravo.com/erp/devel/main"&gt;main&lt;/a&gt; and &lt;a href="http://builds.openbravo.com/"&gt;Continuois Integration engine &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;pi&lt;/span&gt;: The pre-integration repository. Developers push directly here.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;main&lt;/span&gt;: The stable repository. A manual merge is done before the release time.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;builds&lt;/span&gt;: Integrated with &lt;a href="http://hudson-ci.org/"&gt;Hudson&lt;/a&gt; tool, that executes about 12 builds/test on main and pi&lt;/span&gt;&lt;span style="font-size:85%;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Process&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; This is how pi and main fit in our Continuous Integration &lt;a href="http://builds.openbravo.com/"&gt;engine&lt;/a&gt;:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Developers commit locally and push their changes to &lt;a href="https://code.openbravo.com/erp/devel/pi"&gt;pi&lt;/a&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;There are around 12 &lt;a href="http://builds.openbravo.com/view/devel-pi/"&gt;builds and tests&lt;/a&gt; that are polling the &lt;a href="https://code.openbravo.com/"&gt;SCM&lt;/a&gt; for changes to the &lt;a href="https://code.openbravo.com/erp/devel/pi"&gt;pi&lt;/a&gt; repository If there are changes the builds are run. If they fail developers are notified in the IRC channel  #openbravo and in the development mailing list.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;The &lt;a href="https://code.openbravo.com/erp/devel/main"&gt;main&lt;/a&gt; repository comes to action on the release time:&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;When the release start date comes, we make sure that all the tests in pi run successfully.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Once everything is green and good, we merge pi into main.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;QA starts the manual test process, testing those parts that are not automated yet.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;If major issues are found, we transplant changesets from pi into main.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Issues/Drawbacks of this model&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Main does not always contain stable code. Whenever we do a transplant there's a potential risk that so we need to run all the tests in main again. So main can only be considered reliable on release time. And we want the tip of the repository to always be trustworthy.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Experience has shown that pi tends to be unstable. And this annoys developers and the release engineering team (us).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Depending on the number of the commits and changesets pushed to pi since the merge to main was done, if a transplant is required there is a potential risk. Because pi is more advanced in features and fixes. And we don't want to freeze pi.&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;Proposed Model&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;We use Mercurial as our SCM, so its distributed nature will be an invaluable help solving this problem. We are already running bunch of builds and tests. This is great. We now wanted to automatically mark those revisions as "good" or "tested".&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Need for integration stage&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Doing integration in main is a bad idea, doing it in pi is even worse. We already have pre-integration and the final main repository. So having a integration repository is a natural choice that fits in this model.&lt;br /&gt;&lt;br /&gt;Now we have &lt;a href="https://code.openbravo.com/erp/devel/pi"&gt;pi&lt;/a&gt;, &lt;a href="https://code.openbravo.com/erp/devel/main"&gt;main&lt;/a&gt;, &lt;a href="https://code.openbravo.com/erp/devel/int"&gt;int&lt;/a&gt; and &lt;a href="http://builds.openbravo.com/"&gt;builds&lt;/a&gt;&lt;br /&gt;How would this work then with a integration repository? (let's call it "int")&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Developers work on &lt;a href="https://code.openbravo.com/erp/devel/pi"&gt;pi&lt;/a&gt;. A set of tests are run on pi to detect silly problems.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="https://code.openbravo.com/erp/devel/int"&gt;int&lt;/a&gt; pulls from &lt;a href="https://code.openbravo.com/erp/devel/pi"&gt;pi&lt;/a&gt; from time to time, and triggers a set of &lt;a href="http://builds.openbravo.com/view/devel-int/"&gt;builds and tests&lt;/a&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;If all the builds and tests are run successful, we can consider the tip of int as "good". So int pushes all the changesets to main.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Repeat the process forever.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Example&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Step 1: Create first/top job that does &lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size:85%;"&gt;* Pulls the last successfull changesets from &lt;span class="il"&gt;pi&lt;/span&gt; into int.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;* Clone int locally in the system (int-1)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Step 2: Incremental build for PostgreSQL (erp_devel_int-inc-pgsql).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;* This job polls from int-1. If there are changes it runs the job.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;* If the job is successful, it pushes the changesets &lt;span class="il"&gt;to&lt;/span&gt; a new repository, int-2.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Step3: Incremental build for Oracle (erp_devel_int-inc-oracle).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;* This job polls from int-2. If there are changes it runs the job.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;* If the job is successful, it pushes the changesets &lt;span class="il"&gt;to&lt;/span&gt; a new repository, int-3.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;(. . .)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Step 11: Smoke test on Oracle (erp_devel_int-oracle-smoke-test).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;* This job polls from int-10. If there are changes it runs the job.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Step 12: Promote pi to main (erp_promote_pi_to_main)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:78%;"&gt;* If the job is successful, it pushes the changesets &lt;/span&gt;&lt;span class="il"  style="font-size:78%;"&gt;from int-11 to&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;span class="il"  style="font-size:78%;"&gt;main&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;      &lt;span style="font-weight: bold;font-size:85%;" &gt;What do we achieve with this model?&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Logical order: if an incremental job fails a full build will not be triggered. Because the full job is polling for changes from int-3, but as the job failed no push to int-3 has happened.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;The revision tested by the last job has been tested in all the jobs. So we have the guarantee that it has passed all the tests. And we can push it to main.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;The short-time jobs do not have to wait for the long time jobs. Not all the revisions tested by job 1 are tested by job 2. But the opposite is always true. All the jobs tested by 2 have been tested by 1.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;The model does not depend on a specific Continuous Integration software.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7657409735507515078-2966950773502508760?l=pmpearl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmpearl.blogspot.com/feeds/2966950773502508760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pmpearl.blogspot.com/2009/11/automatic-promotion-of-stable-code.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7657409735507515078/posts/default/2966950773502508760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7657409735507515078/posts/default/2966950773502508760'/><link rel='alternate' type='text/html' href='http://pmpearl.blogspot.com/2009/11/automatic-promotion-of-stable-code.html' title='Automatic Promotion of stable code'/><author><name>priyam</name><uri>http://www.blogger.com/profile/09886609888883661912</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7657409735507515078.post-6431654401405912183</id><published>2009-06-15T04:19:00.000-07:00</published><updated>2009-07-14T04:54:12.740-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CI'/><category scheme='http://www.blogger.com/atom/ns#' term='Hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='Hudson Install'/><category scheme='http://www.blogger.com/atom/ns#' term='Openbravo'/><category scheme='http://www.blogger.com/atom/ns#' term='Continuous Integration'/><title type='text'>Continuous Integration-Hudson-Architecture-Install</title><content type='html'>&lt;span style="font-weight: bold;font-family:georgia;font-size:100%;"  &gt;Continuous Integration (CI)&lt;/span&gt;&lt;br /&gt;&lt;div  style="text-align: left;font-family:georgia;"&gt;&lt;span style="font-size:85%;"&gt;The term "continuous integration" refe&lt;/span&gt;&lt;span style="font-size:85%;"&gt;rs to a process that builds and tests code on a frequent basis.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul  style="font-family:georgia;"&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Continuous integration servers constantly monitor source code repositories &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;As soon as new changes/commits are detected, they initiate a new build cycle. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Build cycle actually involves code compilation and, in addition, may involve various tests and code analysis. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;If the process encounters errors, it notify the build master&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=";font-family:georgia;font-size:85%;"  &gt;&lt;a href="http://forge.openbravo.com/"&gt;Openbravo&lt;/a&gt; leading professional web-based Open Source ERP! &lt;/span&gt;&lt;span style="font-size:85%;"&gt;decided to use &lt;a href="http://en.wikipedia.org/wiki/Continuous_integration" class="external text" title="http://en.wikipedia.org/wiki/Continuous_integration" rel="nofollow"&gt;Continuous Integration&lt;/a&gt;, a software development practice to make its team integrate their work often. &lt;/span&gt;&lt;span style=";font-family:georgia;font-size:85%;"  &gt;I explored on few CI tools like &lt;/span&gt;&lt;a href="http://cruisecontrol.sourceforge.net/"&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="mw-headline"&gt;Cruise Control (CC)&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=";font-family:georgia;font-size:85%;"  &gt;,&lt;/span&gt; &lt;a href="http://buildbot.net/trac"&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="mw-headline"&gt;Buildbot&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=";font-family:georgia;font-size:85%;"  &gt; and &lt;a href="https://hudson.dev.java.net/"&gt;Hudson&lt;/a&gt;. I liked Hudson for reason likely&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Installation and Configuration (friendly web GUI with extensive on-the-fly error checks , in-line help.)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Extensibility through plugin&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Permanent links (gives you clean readable URLs for most of its pages)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXxEJrlcuhA/Sjc_1mEOEBI/AAAAAAAAAOo/q8Bl5_z7qQw/s1600-h/Screenshot.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 256px;" src="http://2.bp.blogspot.com/_sXxEJrlcuhA/Sjc_1mEOEBI/AAAAAAAAAOo/q8Bl5_z7qQw/s320/Screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5347813272509616146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:georgia;font-size:100%;"  &gt;Hudson Architecture &lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:georgia;font-size:85%;"  &gt;Hudson a continuous integration tool, which schedules the job process as cron job,&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=";font-family:georgia;font-size:85%;"  &gt;It is primarily a set of Java classes &lt;/span&gt;&lt;span style=";font-family:georgia;font-size:85%;"  &gt;likely&lt;/span&gt;&lt;span style=";font-family:georgia;font-size:85%;"  &gt; where Hudson is the root Object model, it has &lt;/span&gt;&lt;span style=";font-family:georgia;font-size:85%;"  &gt;'project class&lt;/span&gt;&lt;span style="font-size:85%;"&gt;' and &lt;/span&gt;&lt;span style=";font-family:georgia;font-size:85%;"  &gt;'build class&lt;/span&gt;&lt;span style="font-size:85%;"&gt;' and some&lt;/span&gt;&lt;span style=";font-family:georgia;font-size:85%;"  &gt; 'interfaces' to perform some part of build like scm   &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:georgia;font-size:85%;"  &gt;Hudson classes are bound to Staple (Stapler is a library that "staples" your application objects to URLs, making it easier to write web applications. The core idea of Stapler is to automatically assign URLs for your objects, creating an intuitive URL hierarchy.)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:georgia;font-size:85%;"  &gt;To render a html pages hudson uses Jelly (is a tool for turning XML into executable code. So Jelly is a Java and XML based scripting and processing engine)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;It uses file system to store, data directories are stored in HUDSON_HOME       as plain text like the console-output (few as java properties file format, Majority of them uses Xstream, eg : project configuration, or various records of the build)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:georgia;font-size:85%;"  &gt;Hudson can be installed either by running the hudson.jar file(ex. java -jar hudson.jar) or just by deploying it in a servlet container. &lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;How I deployed&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:georgia;font-size:85%;"  &gt;&lt;a href="https://hudson.dev.java.net/"&gt;&lt;/a&gt;&lt;br /&gt;I deployed Hudon tomcat on port 8080 and redirected to port 80 (default) using mod_jk and apache on a gentoo operating system&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=";font-family:georgia;font-size:85%;"  &gt;deploy the war file in tomcat directory&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:georgia;font-size:85%;"  &gt;Add "-D JK" to /etc/conf.d/apache2, in the APACHE2_OPTS line.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Add "JkMount /* ajp13", at the end, before  to /etc/apache2/modules.d/88_mod_jk.conf&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;check Openbravo's Continuous Integration system &lt;a href="http://builds.openbravo.com/"&gt;here&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:georgia;font-size:85%;"  &gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7657409735507515078-6431654401405912183?l=pmpearl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmpearl.blogspot.com/feeds/6431654401405912183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pmpearl.blogspot.com/2009/06/continuous-integration-hudson.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7657409735507515078/posts/default/6431654401405912183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7657409735507515078/posts/default/6431654401405912183'/><link rel='alternate' type='text/html' href='http://pmpearl.blogspot.com/2009/06/continuous-integration-hudson.html' title='Continuous Integration-Hudson-Architecture-Install'/><author><name>priyam</name><uri>http://www.blogger.com/profile/09886609888883661912</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sXxEJrlcuhA/Sjc_1mEOEBI/AAAAAAAAAOo/q8Bl5_z7qQw/s72-c/Screenshot.png' height='72' width='72'/><thr:total>1</thr:total></entry></feed>
