Capture Jenkins Job Environment Variables in XL Release
Last Updated Oct 02, 2016 — DevOps Expert
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:
Let’s now look at a detailed view of task:
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)
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.
With 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.pysample 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:
# now we can track our builds
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:
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):
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:Once the Jenkins job completes, you can run a release and look at the task:
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.
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.
Regardless of where you are on your digital transformation journey, we can help you achieve your strategic outcomes and accelerate value delivery with the right combination of technology, services, and training.