Last Updated Oct 02, 2016 — DevOps Expert
DevOps

One of our most important goals here at XebiaLabs is to make sure our customers get the most out of their investments, not just with respect to our products, but also to other tools in the DevOps tool chain. Today, I’d like to share with you how you can effectively use your Maven POM metadata (GAV Definition) and other environment variables in XL Release by propagating them through Jenkins.

Currently Jenkins task in XL Release only returns back BUILD NUMBER and BUILD STATUS as output properties that you can capture in variables. But what if you want to capture all the environment variables that are available in a build job including Maven POM Variables? Here’s how to do it.Let’s first look at a Jenkins task inside XL Release:5

Let’s now look at a detailed view of task:

6

XL RELEASE FREE TRIAL

XL Release makes it easier to manage complex, multi-level and interdependent software release pipelines, no matter where you are in your Continuous Delivery journey. Sign up for a free 30-day trial and get better control, visibility, and automation for your release pipelines today.

Changes for Capturing Environment Variables

Let’s move on to the changes you’ll need to make in Jenkins to capture environment variables:

  • In your Jenkins instance, go to Manage Plugins and install this plugin EnvInject Plugin.
  • Select a candidate job that you want to trigger using XL Release Jenkins task. In this case, we’re using a petclinic job that builds the sample spring-petclinic GitHub project,  which is available online using Java and Maven.
  • After creating a new job, go to Configure Job, and set up basic things like build commands, GitHub repo, and so on.
  • In the General section, check the option Prepare an environment for the run, then check the options for Keep Jenkins Environment Variables and Keep Jenkins Build Variables. These allow you to capture all the standard environment variables.
  • To capture the POM variables that in turn will allow you to capture the GAV Definition, do the following:
    • In Pre-Steps, add 3 steps in the following order (considering you’re running on Linux)
      • Execute Shell echo POM_VERSION=$POM_VERSION > mvn.props
      • Inject Environment Variables ( provide mvn.props as the value in Properties File Path property)
      • Execute Shell rm mvn.props
    • When you’re done with the above, save the job.

How to effectively use Maven POM metadata by propagating them through JenkinsWith the EnvInject Plugin, the XL Release task will be modified to access the environment variables through the expose REST API by this plugin.Sample :  http://localhost:8080/jenkins/job/petclinic/14/injectedEnvVars/api/json

Changes in XL Release

Next we’ll make changes to XL Release. Here we’ll perform a type and script modification to add extra functionality to Jenkins task. To prepare for this, we first need to get the python script that’s currently executed as part of Jenkins task. Take the following steps:

  • Go to the box where XL Release is installed.
  • Go to XL Release Home folder and then inside lib folder.
  • Look for the server-****.jar file.
  • Now using either an unzip utility or the jar command, unzip to extract the following file: jenkins/Build.py sample jar command :  jar -xvf server-5.0.0.jar jenkins/Build.py
  • You’ll see a folder named Jenkins containing a Build.py, which is created in the lib folder
  • Now make the changes outlined below.
    • Edit the XLR_HOME/ext/synthetic.xml and type the following:
        
                 
        
      
    • Move the jenkins folder under XLR_HOME/ext/ such that it looks like XLR_HOME/ext/jenkins/Build.py
    • Edit that file and look out for this section:
        while True:
            # now we can track our builds
            time.sleep(poll_interval)
            response = request.get(jobContext + str(buildNumber) + '/api/json', contentType = 'application/json')
            buildStatus = JsonPathResult(response.response, 'result').get()
            duration = JsonPathResult(response.response, 'duration').get()
            if buildStatus and duration != 0:
                break
      
    • Underneath this section, add the following lines (be careful of indentation as these lines are not inside the while loop but at the same level):
        envResponse = request.get(jobContext + '/' + str(buildNumber) + '/injectedEnvVars/api/json', contentType = 'application/json')
        properties = JsonPathResult(envResponse.response,'envMap').get()
      
    • Save Build.py. You have now overridden the Jenkins functionality to add a new field that’s of type string key-value map and will be populated by the environment variables from Jenkins.
    • Restart XL Release.

Testing Changes in the XL Release GUI

You’ll now notice that your previous Jenkins task shows another extra field in output properties:How to effectively use Maven POM metadata by propagating them through JenkinsOnce the Jenkins job completes, you can run a release and look at the task:How to effectively use Maven POM metadata by propagating them through Jenkins.

Using the Captured Values

To create a variable as a map full of values, you can specify the variable in the properties field. Let’s call that variable props.

  • To use the value in a script task or precondition, use it as follows: print releaseVariables['props']['POM_VERSION'] where props is the map variable and POM_VERSION is the key whose value need to be captured.
  • To use the value in a manual task, email body, or anywhere else, you need to create a variable per value that you want to capture and then use a script task to set them with the right values. For detailed instructions see: https://docs.xebialabs.com/xl-release/how-to/get-a-value-from-a-map-variable.html

Continue learning how Jenkins and XL Release work together by visiting our Jenkins Solutions Page.

Are you ready to scale your enterprise?

Explore

What's New In The World of Digital.ai

August 4, 2023

Why Financial Services Need DevSecOps More Than Ever

With Digital.ai DevSecOps solutions, financial organizations can improve their security posture, meet regulatory requirements and focus on delivering innovative financial products.

Learn More
June 23, 2023

Governance and Compliance for DevOps at Scale

Implement a Software Chain of Custody in DevOps for compliance, traceability, and cost reduction. Gain visibility and automate processes with Digital.ai Release & Deploy.

Learn More
April 10, 2023

Continuous Delivery Implementation Done Right: Learn from National Broadband Ireland Story

Through NBI’s approach to be the best open-access operator in telecom, they have been supported by key technology partners, with automation capabilities provided by Digital.ai Release and Deploy underpinning integral aspects.

Learn More