Skip to main content
https://img.shields.io/pypi/v/jenkins_jobs.svg https://github.com/glasswalk3r/jenkins-jobs/actions/workflows/main.yml/badge.svg

Listing all jobs on a Jenkins server with more information than just their respective names.

  • Free software: GNU General Public License v3

Features

  • Implements the jenkins_jobs CLI that allows the reporting of jobs in a Jenkins server.

  • The reports includes information of job name, job type, job description, if the job is executed through a schedule and the schedule itself.

  • Implements the jenkins_exporter CLI that allows the exporting of jobs information to a file in a Shelve format, which allows to export this information and use it locally for development or even with jenkins_jobs CLI.

Rationale

Some time ago I got to migrate jobs from three Jenkins servers with about 800 jobs included among them and the need to migrate those jobs to somewhere else.

I will not discuss the reasons for such humongous amount, but anyway I would need to understand what those jobs were, how they were built and other details, so I could come up with a better strategy of migration.

For my surprise, no tooling was available to use at that time.

Listing with Jenkins CLI

My first attempt was to use the official Jenkins CLI to extract that information.

If you are curious, you can use Vagrant with the following Vagrantfile and download the Vagrant VirtualBox box I created with a sample Jenkins server and some examples jobs over there:

Vagrant.configure("2") do |config|
  config.vm.box = "arfreitas/jenkins-centos7"
  config.vm.box_version = "0.0.1"
  config.vm.network 'forwarded_port', guest: 8080, host: 8080, id: 'jenkins'

  config.vm.provider 'virtualbox' do |vb|
    vb.gui = false
    vb.memory = '2048'
    vb.cpus = '2'
    vb.name = 'jenkins-sample'
end

These are the credentials already setup:

  • user: admin

  • password: admin

  • token: 116f3e55f677416a7c054faa20fbbcf0be

Finally, fire up the VM:

$ vagrant up

After the setup is complete, fire up the commands below:

$ vagrant ssh
$ java -jar jenkins-cli.jar -s http://localhost:8080/ -webSocket -auth admin:116f3e55f677416a7c054faa20fbbcf0be list-jobs
freestyle-sample
pipeline-sample

Not a very exciting output. You will get the job names and that’s it.

Listing with the REST API

So then I tried the Jenkins REST API with the sample.py Python 3 program:

$ cd /vagrant
$ ./sample.py
{'_class': 'hudson.model.FreeStyleProject', 'name': 'freestyle-sample', 'url': 'http://localhost:8080/job/freestyle-sample/', 'color': 'notbuilt', 'fullname': 'freestyle-sample'}
XML information:
OrderedDict([('project',
              OrderedDict([('keepDependencies', 'false'),
                           ('properties', None),
                           ('scm',
                            OrderedDict([('@class', 'hudson.scm.NullSCM')])),
                           ('canRoam', 'false'),
                           ('disabled', 'false'),
                           ('blockBuildWhenDownstreamBuilding', 'false'),
                           ('blockBuildWhenUpstreamBuilding', 'false'),
                           ('triggers', None),
                           ('concurrentBuild', 'false'),
                           ('builders', None),
                           ('publishers', None),
                           ('buildWrappers', None)]))])
{'_class': 'org.jenkinsci.plugins.workflow.job.WorkflowJob', 'name': 'pipeline-sample', 'url': 'http://localhost:8080/job/pipeline-sample/', 'color': 'notbuilt', 'fullname': 'pipeline-sample'}
XML information:
OrderedDict([('flow-definition',
              OrderedDict([('@plugin', 'workflow-job@2.40'),
                           ('keepDependencies', 'false'),
                           ('properties', None),
                           ('triggers', None),
                           ('disabled', 'false')]))])

If you take in consideration this is almost raw output, it’s an improvement because of the additional details, but far from enough.

First because part of the output is XML. Second, it is not exactly easy to understand the output.

Worst, the XML specification depends on the job underline mechanism: if the job is based on a plugin, the XML format will depend on that plugin, not on Jenkins.

Getting documentation about the XML format is another challenge.

Solution

What the jenkins-jobs project tries to do is to map desired information from the XML format based on the Python classes under jenkins_jobs.jobs module.

References

Credits

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

Metadata

Release files for jenkins_jobs 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for jenkins_jobs 0.2.0
File Size Uploaded
jenkins_jobs-0.2.0.tar.gz 25.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for jenkins_jobs 0.2.0
File Interpreter ABI Platform
jenkins_jobs-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 52.2 kB

Release files / jenkins_jobs-0.2.0.tar.gz

Download URL jenkins_jobs-0.2.0.tar.gz
Size 25.2 kB
Tags Source
SHA-256 checksum
How to use checksums
75a8e900c5d04adf65e0781c60bc7c5ee98f75d6e5e7be88540af6497d1ef12d
BLAKE2b-256 checksum
How to use checksums
268e8fc86a353a3ba21a4094f71bec9c38e864bb1e121e01f97ec920e4d91c89
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / jenkins_jobs-0.2.0-py3-none-any.whl

Download URL jenkins_jobs-0.2.0-py3-none-any.whl
Size 27.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6de88c7cb1bb9c9ac37bfa50f3262cdd409ba3a25933e114c38edbee8bf1a0cf
BLAKE2b-256 checksum
How to use checksums
ab98faa14038471e8b7641d947e46a7d18302c3be8db2c5d1c63f51b05fb1eec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page