Difference between revisions of "Talk:Jenkins Analysis"

From Gcube Wiki
Jump to: navigation, search
(Blanked the page)
 
Line 1: Line 1:
In the first period of the project a parallel activity started to analyze how to model gCube with an alternative Software Integration Tool: Jenkins.
 
<br>
 
Jenkins is the main tools adopted in the Java’s world for the Continuous Integration and Continuous Delivery. It’s supported from wide community Open-source and it’s possible to integrate with the other technology , for example Docker.
 
<br>
 
Developers can integrate their work by applying continuous merge for the changes made to the project. Jenkins allows an automatic build every time the developers commit their jobs and in real time to understand if the developers’ commit corrupt the software product.
 
<br>
 
The comparison using the same:
 
  
* same virtual machine
 
* same operating system Centos ,
 
* same Servlet Container : Tomcat.
 
* same project: a Jenkins instance has been configured at ENG infrastructure and configured to build some gCube components as preliminary tests to switch to the new integration system.
 
<br>
 
The version used for Jenkins is 1.6.09, the ETICS version used is 1.8.2-0.
 
<br>
 
The main feature analyzed regarding the management :
 
 
* Configuration Project (How to model gCube in Jenkins, if possible),
 
* Role and Permission (Security Management),
 
* MultiBranch versioning ,
 
* Artefacts and Downstream/Upstream.
 
<br>
 
'''Configuration Project'''
 
In Jenkins, the terminology project or job is interchangeable: a software project is called project or job.
 
 
In ETICS, a software project is called project. The terminology job has the same meaning used in the Unix/Linux Operating System.
 
 
A Jenkins project is a container that includes other projects (jobs) : the project’s hierarchical structure is the same used of the Linux directories.
 
 
A ETICS project is a container that it can split in subsystems and/or components:
 
 
* one project is defined from one or more subsystems and/or components,
 
* one subsystem is the set of one or more subsystem and /or components,
 
* one component is the smallest part for a project.
 
<br>
 
The Jenkins project start with the creation of a new project (or job) as reported on the official jenkins documentation ([
 
https://jenkins.io/doc/]). No distinction from HEAD and Release project. The ETICS project start with the creation of a new project creating before the HEAD and then the release project.
 
 
It’s very simple configure Jenkins through the use of the same web-interface (as administrator):
 
 
[[File:ConfiguraJeknis.jpg]]
 
 
Figure - Jenkins’ configuration.
 
 
Now , Jenkins is ready to use and integrate with every SCM (VCS, GIT, …) or existence build tools. It’s possible to create a new project in five minutes.
 
'''Role and Permission'''
 
To manage Role and Permission , in Jenkins, it’s necessary to install Role Plugin (ref. https://wiki.jenkins-ci.org/display/JENKINS/Role+Strategy+Plugin).
 
<br>
 
Now, it’s possible to manage Role and Permission as ETICS and described in the “Software Integration and Distribution Roles” wiki page (ref. https://wiki.gcube-system.org/gcube/Software_Integration_and_Distribution:_Roles):
 
* Development Tester,
 
* Functional Tester,
 
* Developer,
 
* Release Manager and
 
* Subsystem Manager.
 
 
 
[[File:Rolemanagement.jpg]]
 
 
Figure - Jenkins' Role Management
 
 
For every role specific permission are assigned:
 
* Developer can modify/create only own job configuration(only components developed in a specific subsystems),
 
* Subsystem Manager can modify/create own job configuration (consist of own subsystems and components),
 
* Release Manager is Administrator for that project (he/she can add role/permission to all project’s users)
 
* Functional Tester can assign job to the testers but he/she can only read the job configuration.
 
* Deployment Tester can only read the job configuration to test.
 
 
After, it's possible to add the specific users to whom it want to provide authorization:
 
 
[[File:Authorizationmanagement.jpg ‎]]
 
 
Figure - Jenkins' Authorization Management
 
 
'''MultiBranch versioning'''
 
<br>
 
In Jenkins, the multi-branch versioning is not supported. It needed wait the version 2.0 to have the support to the multi-branch versioning.
 
 
'''Downstream and Upstream'''
 
<br>
 
Jenkins support the Downstream and Upstream job through the use of  plug-ins “Trigger/call builds on other projects” [more details on the official jenkins documentation “ Parameterized Trigger Plugin “ https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin].
 
<br>
 
The use of this plug-in allows to get started other jobs with the same parameters for the existing configuration but at the same the risk is having the trigger job run more than one.
 
<br>
 
'''Artefacts'''
 
<br>
 
It’s necessary to install the Artefact Post-Build Plugin to manage the artefacts.
 
<br>
 
After this, It’s very simple to archive the artefacts as long as:
 
* to create and select in the post-build action of the job configuration : “archive the artefacts”,
 
* to insert the type of file to archive (jar, war, and so on).
 
 
The following table provides a summary about the main topics for the Jenkins:
 
 
 
{|  border="1" cellspacing="0" cellpadding="0" class="Table1" 
 
|  style="text-align:left;width:6.736cm; " | <span>Feature</span>
 
|  style="text-align:left;width:9.172cm; " | <span>Jenkins</span>
 
|-  class="Table12"
 
|  style="text-align:left;width:6.736cm; "  | <span>Software project (job)</span>
 
|  style="text-align:left;width:9.172cm; "  | <span>The words job and project are interchangeable.</span>
 
|-  class="Table12"
 
|  style="text-align:left;width:6.736cm; "  | <span>OpenSource</span>
 
|  style="text-align:left;width:9.172cm; "  | <span>It’s an open source software with MIT license.</span>
 
|- 
 
|  style="text-align:left;width:6.736cm; "  | <span>Plugins</span>
 
|  style="text-align:left;width:9.172cm; "  | <span>Widely choice of plugin. The risk is to install plugin unuseful.</span>
 
|-  class="Table12"
 
|  style="text-align:left;width:6.736cm; "  | <span>Support</span>
 
|  style="text-align:left;width:9.172cm; "  | <span>Widely community and documentation</span>
 
|-  class="Table16"
 
|  style="text-align:left;width:6.736cm; "  | <span>Easy Usage</span>
 
|  style="text-align:left;width:9.172cm; "  | <span>It’s very friendly to use the first time.</span>
 
|- 
 
|  style="text-align:left;width:6.736cm; "  | <span>Notification</span>
 
|  style="text-align:left;width:9.172cm; "  | <span>Widely tools are supported: Email, Android, GoogleCalendar, Twitter...</span>
 
|- 
 
|  style="text-align:left;width:6.736cm; "  | <span>Integration IDE</span>
 
|  style="text-align:left;width:9.172cm; "  | <span>Eclipse, IntelliJIdea, NetBeans</span>
 
|- 
 
|  style="text-align:left;width:6.736cm; "  | <span>Installation</span>
 
|  style="text-align:left;width:9.172cm; "  | <span>Very simple to instal.</span><p class="P3"><span class="T3">Mandatory pre-requisites are : 1) the last version of java; RAM&gt;=2GB; space disk : no minimum requirement. It recommended to have a sufficient space disk for the archiving of the build;Java container: the WAR file can be run in any container that supports Servlet &gt;= 2.4 / JSP &gt;= 2.0 (in our case Tomcat).
 
|-
 
|  style="text-align:left;width:6.736cm; "  | <span>Configuration</span>
 
|  style="text-align:left;width:9.172cm; "  | <span>It’s possible having the first simple automatic build with the simple steps. </span>
 
|- 
 
|  style="text-align:left;width:6.736cm; "  | <span>Customization</span>
 
|  style="text-align:left;width:9.172cm; "  | <span>The official site provide customization and feature bacis, plugin: </span><span>https://jenkins-ci.org/</span><span>. </span>
 
|- 
 
|  style="text-align:left;width:6.736cm; " |<span>Operating System</span>
 
|  style="text-align:left;width:9.172cm; " |<span>It’s possibile to install Jenkins in Window, Linux , OS_X. The complete list is provided in the official site : <span>https://jenkins-ci.org/</span><span class="T3">. </span>
 
|-  class="Table11"
 
|  style="text-align:left;width:6.736cm; "  | <span>Log Error</span>
 
|  style="text-align:left;width:9.172cm; "  | <span>Not better supported</span>
 
|-  class="Table11"
 
|  style="text-align:left;width:6.736cm; "  | <span>SCM </span>
 
|  style="text-align:left;width:9.172cm; "  | <span>Jenkins is ready to use and integrate with every SCM (VCS, GIT, …) or existence build tools.But mainly Jenkins support with many plugin Jenkins. But it works better with the GIT.</span>
 
|- 
 
|  style="text-align:left;width:6.736cm; "  | <span>Distributed Release</span>
 
|  style="text-align:left;width:9.172cm; "  | <span> Jenkins can distribute build/test to multiple terminal (servers,desktop, computers) with different OS:(ref. </span><span>https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins</span><span>).</span>
 
|-
 
|  style="text-align:left;width:6.736cm; "  | <span>Multi-Branch Release</span>
 
|  style="text-align:left;width:9.172cm; "  |<span>The version Jenkins used (1.6.09) doesn’t support the MultiBranch versioning . This will be supported in the Jenkins 2.0.</span>
 
|- 
 
|  style="text-align:left;width:6.736cm; "  | <span>Backup Management</span>
 
|  style="text-align:left;width:9.172cm; "  | <span class="T3">A tiny plugin backup allows to store the main directories and files of jenkins: job, xml files, scripts .</span>
 
|}
 
 
 
<center>Table - Jenkins Feature</center>
 
 
===Conclusion===
 
Although Jenkins is the Software Integration Tools more used in the Java’s world community, some constraints in its use for the gCube:
 
- For the version control is not possible to keep track about the version of the jobs.
 
- Multi-branch version is not support as well as
 
- Use of the downstream/upstream jobs it’s very simple but the risk is to repeat the build more and more time (in particular for the job with no specific configuration but it recalls other parametrized trigger plug-in).
 
- Jenkins supports many tools and software (proprietary or not) through the use of the plug-ins, but the risk would be to install useless plug-ins and that will never be used.
 
Moreover, it becomes very complex and you need to spend much effort to figure out how to make the GCUBE structure so as occurs at the time ETICS simple and readable.
 

Latest revision as of 17:13, 9 November 2016