Continuous Integration: Dependency Walker Jenkins Pipeline

From Gcube Wiki
Revision as of 22:46, 23 September 2020 by Manuele.simi (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Description

The Dependency Walker pipeline allows to navigate dependencies among projects in Jenkins.

Given the name of a Jenkins project (P):

  • navigate the maven modules built by (P)
  • recursively analyze the modules' dependencies and their Jenkins projects
  • generate the list of projects that have modules depending on each maven module in (P)
  • print a formatted report of the information extracted with the analysis.

Pipeline Definition

The definition of the gCube Dependency Walker pipeline is maintained in this Git Repository: https://code-repo.d4science.org/gCubeCI/gCubeDepsWalker

Interface

The pipeline can be launched at https://jenkins.d4science.org/job/Pipeline-gCubeDependencyWalker/.

Jenkins DepsWalkerInterface.png

Report

The report is divided in two main sections:

1. Project Maven Modules This section lists all the Maven Modules built by the current Jenkins instance that depend on the input project. In particular, for each Maven Module, it reports:

  • Deepest Dependency Level: the deepest level of dependency of this module with respect to the input project. L1 is the level of the modules directly built by the project, L2 is the level of the modules that use L1 modules, and so on;
  • Used by: the list of modules that use the module;
  • Referred by: the list of Jenkins projects that refer the module (which are basically the projects that build the Used by modules).

2. All Downstream Projects This section presents a union of all the Jenkins projects affected by the changes in the input project. These projects built Maven modules that depend on modules built by the input project, directly or through transitive dependency.

Sample Report

Dependency Report for workspace-sharing-widget

|--Project Maven Modules
	|--Module: org.gcube.portlets.widgets:workspace-sharing-widget
		|--Deepest Dependency Level: L1
		|--Used by (Maven Modules)
			|--org.gcube.portlets.user:tabular-data-share-widget
			|--org.gcube.portlets.user:workspace-tree-widget
		|--Referred by (Jenkins Projects)
			|--workspace-sharing-widget
			|--tabular-data-share-widget
			|--workspace-tree-widget
	|--Module: org.gcube.portlets.user:tabular-data-share-widget
		|--Deepest Dependency Level: L2
		|--Used by (Maven Modules)
			|--org.gcube.portlets.user:tabular-data-manager
			|--org.gcube.portlets.user:tabular-data-rule-widget
		|--Referred by (Jenkins Projects)
			|--tabular-data-share-widget
			|--tabular-data-manager
			|--tabular-data-rule-widget
	|--Module: org.gcube.portlets.user:workspace-tree-widget
		|--Deepest Dependency Level: L2
		|--Used by (Maven Modules)
			|--org.gcube.portlets.user:workspace
		|--Referred by (Jenkins Projects)
			|--workspace-tree-widget
			|--workspace
	|--Module: org.gcube.portlets.user:tabular-data-manager
		|--Deepest Dependency Level: L3
		|--Used by (Maven Modules)
		|--Referred by (Jenkins Projects)
			|--tabular-data-manager
	|--Module: org.gcube.portlets.user:tabular-data-rule-widget
		|--Deepest Dependency Level: L3
		|--Used by (Maven Modules)
			|--org.gcube.portlets.user:tabular-data-manager
		|--Referred by (Jenkins Projects)
			|--tabular-data-rule-widget
			|--tabular-data-manager
	|--Module: org.gcube.portlets.user:workspace
		|--Deepest Dependency Level: L3
		|--Used by (Maven Modules)
		|--Referred by (Jenkins Projects)
			|--workspace


|--All Downstream Projects
	|--tabular-data-manager
	|--tabular-data-rule-widget
	|--tabular-data-share-widget
	|--workspace
	|--workspace-sharing-widget
	|--workspace-tree-widget


Back to the CI guide.