svn - Release management with jenkins. Components and Projects



I'm trying to achieve a functional release cycle using jenkins plus any other (preferably free) solutions out there to manage the construction of several components written in different technologies, which can be compiled and released individually, to produce an output project.

Right now we have a series of different components, each one defined as a Jenkin Job which produces all the files required by that component. The components are written in different technologies including Maven projects, BPMS and .NET projects.

For a given release we need to build each component that will be deployed, manually tag the build and then put it all together and deploy. That means in each deployment we need to manually handle and remember what components and what version of each component is involved in a release with the risk of forgetting to include a given component.

What I'm looking for is for some kind of software or combination of plugins that allows me to:

  • Define a project as defined by a number of different components and, optionally, configuration files.
  • Have Jenkins build each component, while at the same time maintaining the ability to build each component individually. This means triggering a build on a job will not overwrite the result of a release.
  • After building the project tag every single component involved in SVN and have the result of each component build in a single location specific to that build.

For example, right now I may have three components / jenkin jobs called:

  • Component 1
  • Component 2
  • Component 3

And I want to be able to define a given project as:

  • Project 1
    • Component 1
    • Component 2

so that when I build the Project1 with param: myEnvironment:

  • Component1 and Component 2 are build
  • Output for the component is output to some myEnvironment/Component1 and myEnvironment/Component2
  • is copied to folder/
  • All files used for the build are tagged

Ideally, there will be an easy way to visualize the dependency tree for all components involved. That is, it will be easy to know that Project 1 is composed of Component1 and Component2.

Any suggestions?

1 Answer: 

I suggest to create normal Jenkins Jobs for your components. These jobs can check-out from scm, build, tag, commit single component.

To connect this builds in a process or flow, like often called in CI context, you can use a Jinkins job that will control your components jobs. We use the Cloudbee's flow plugin:

"This plugin allows managing Jenkins jobs orchestration using a dedicated DSL, extracting the flow logic from jobs."

For example: We have a component (dll) that we need to build 30 times with a small change in the RC file. In this case we use a job to loop another parameterized job that will build 30 different components from the same job.

If you want to visualize you build flow, there is (FLOW) which is a kind of Jenkins plugin but also a flowdesigner that integrates Jenkins. FLOW looks great and exactly like what I was looking for, but unfortunately it is not easy to integrate an existing Jenkins instance and it's not as flexible as I thought. Also many other plugins are not supported/visualized like the very flexible Cloudbee's flow plugin.

An alternative that visualize your Jenkins Jobs is . But this does not support the Cloudbee's flow plugin. Otherwise it would be a nice plugin to visualize my build pipeline.

At least there is a brand new plugin I found in this second: . But I need to review it before I can say anything about it.