Skip to main content

Listing all jobs on a Jenkins server with more information than jenkins-cli.jar

Project description

Jenkins Jobs

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.

History

0.0.1 (2021-02-14)

  • First release on PyPI.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jenkins_jobs-0.1.9.tar.gz (34.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jenkins_jobs-0.1.9-py2.py3-none-any.whl (23.2 kB view details)

Uploaded Python 2Python 3

File details

Details for the file jenkins_jobs-0.1.9.tar.gz.

File metadata

  • Download URL: jenkins_jobs-0.1.9.tar.gz
  • Upload date:
  • Size: 34.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.11

File hashes

Hashes for jenkins_jobs-0.1.9.tar.gz
Algorithm Hash digest
SHA256 724df7054e8626d2055b125d5d0377fa2ab7d9a3174304893ea4d4746da18091
MD5 95f00252c90cb53ad32bd881b218f12d
BLAKE2b-256 e59e7629503053d88a60a26cbd4448aa8e73e237b643f6f08db4eb082d2f3b33

See more details on using hashes here.

File details

Details for the file jenkins_jobs-0.1.9-py2.py3-none-any.whl.

File metadata

  • Download URL: jenkins_jobs-0.1.9-py2.py3-none-any.whl
  • Upload date:
  • Size: 23.2 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.11

File hashes

Hashes for jenkins_jobs-0.1.9-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 cd346325c09eb319fbc16679cd0514e3b7eeb0f868d3e1ed63e4dd8025368c40
MD5 584992d96361fae81fb4e156e63644ea
BLAKE2b-256 b491a37f73405a626f443b68d2312d0a6479a179216c565ae4da401483c71232

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page