This article was originally published on LinkedIn
I have always been curious about how we manage releases of the Fabric images to the Hyperledger community for all the platforms consistently, continuously and with such efficiency since 2016. A couple of weeks ago, Chainyard sponsored and hosted the July JAM (Jenkins Triangle Area Meetup) Organized by the Cloud bees team. Our DevOps expert Ramesh Thoomu (Chainyard) and Will Refvem (Solution Architect) from CloudBees presented a session on Jenkins Job builder (JJB). Around 30 members from different organizations (CloudBees, Redhat, IBM etc.) joined the conversation.
Jenkins Job Builder is a tool to automate the Jenkins job configuration. This gives lot flexibility and consistent way of managing the jobs. JJB gives flexible options to manage jobs as shown below:
- Job template
- Job definitions
A Job configuration on Jenkins UI involves specifying Job Name, Description, Properties, Parameters, SCM, Triggers, Build Environment, Build and Post-build actions. A Hyperledger-Fabric project team is usually working on multiple branches across multiple build platforms. Take an example of a simple job, which one can trigger on “master”, “feature”, “development” branches and on “x86_64” and “s390x” platforms. This can end up creating 6 Jenkins Job on Jenkins UI. This process takes a lot of mouse clicks and results in creating redundant job configuration and manual process. Managing all these jobs is a cumbersome task and can introduce errors if the process is not consistent.
JJB can tremendously simplify the problem. Job templates use Job definitions and modules to fulfill all the above Jenkins job requirements. Within Hyperledge-Fabric release process, the team is successfully managing 100s of Jenkins jobs easily with Jenkins job templates supporting seamless release process. The newer version of JJB supports a Jenkins pipeline plugin which makes things easier to create a touch-less seamless integration on CI/CT/CD, avoiding redundant job configuration and managing the jobs using simple yaml or json formatted configuration files.