How to setup a Python-Jenkins API connection with Python 3

Jenkins Dashboard

I’m working a project to create Python program that scrapes jobs from a Jenkins server, with the end goal of storing them in a Mongo NoSQL database as an archive.  At work we have more than a dozen build servers that will ultimately will be consolidated to a few. 

My plan(since we are moving to a cloud service)  is to use a Jenkins Docker container hosted from a cloud service to dynamically pull the jobs(from my MongoDB) and run builds on demand!

I decided to use the python-jenkins module, but immediately ran into problems.  Nothing serious, just tracking down a few libraries to build the Python modules acquired via pip3.  Afterward I tried to connect to a Jenkins server only to be denied with a 401 ‘invalid password’ error.  I spent all day trying to figure this one out, but there is little online to help.  All the examples I saw were Python2 with HTTPS configurations.  

Goals of this Post:

  • provide a clear example of connecting to Jenkins HTTP REST API via Python-Jenkins

Extra details:

  • Python 3.4, 3.5, 3.6 tested from Fedora 27 Client 
  • Python 3.5 tested from Fedora 24 Client
  • CentOS 6.10 – Jenkins Server ver 2.154

Google Interview Answered in Python


I’m in the process of moving my mindset from static linear scripting to an object oriented one.  My goal is to solve problems with algorithms I create myself.  It’s a tough climb because I come from Systems Admin/Networking side of things and didn’t benefit from Computer Science theory and advanced mathematics.  I’m hoping to eventually move into a DevOps role where I can organically absorb from devs.  It would be great to be able to observe other approaches to problem solving.

The video above is a Google interview prep question from Youtube.  The interviewee solves it with C++, I provide my version in Python below.  Essentially, they are solved in a similar way.  Granted, it took me two weeks of stewing on it and the man above did it on the spot, but he’s a Software Engineer, so I feel pretty good!

The problem is to find pairs of integers that add to 8 from a list assumed to be in ascending order.  Negatives and doubles are possible.



How to Install mysql-connector for Python

For several months Python mysql-connector has been broken when attempting a install from pip.  In truth I’ve only tried Python 3, CentOS 6/7 and Fedora 21; in fact, this could be a more wide spread.  The simple solution is to install an earlier version.  The purpose of this post is to be a quick reminder of which is the most recent working version!



How to handle Python 3 Fabric exceptions with a Decorator

Python’s Fabric module is an easy and efficient way for task based automation.  I use it to automate the installation of VoIP phone systems on CentOS 6/7.  In a nut shell, Fabric executes shell commands over SSH.  It also can be used to automate local tasks.  The purpose of this article is to highlight the basic process of capturing Fabric exceptions(try/except) using a wrapper function called a decorator.  A few well placed decorators can save lot of time coding the same thing over and over(like capturing a specific error). 

Most of you in the know about Python/Fabric probably  will find my examples trivial, but I had to dig to find the Fabric exception environment variable.  I’m sure it’s somewhere on the Fabric site… but I gave up after 30 minutes.  So hopefully you will find this post useful either way!

If you need help installing Python3, pip3 and Fabric please refer to my previous post.

Goals of this Post:

  • create a simple Fabric function that creates a directory
  • create a Fabric exception
  • create Decorator for adding exception handling

Lets start with a basic