Low level examples of module code

Below examples detail out how the api does things internally

Copy an existing job - jenkins.copy_job()

import requests
from pkg_resources import resource_string
from jenkinsapi.jenkins import Jenkins
from jenkinsapi_tests.test_utils.random_strings import random_string

J = Jenkins("http://localhost:8080")
jobName = random_string()
jobName2 = "%s_2" % jobName

url = "http://localhost:8080/createItem?from=%s&name=%s&mode=copy" % (
    jobName,
    jobName2,
)

xml = resource_string("examples", "addjob.xml")
j = J.create_job(jobname=jobName, xml=xml)


h = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.post(url, data="dysjsjsjs", headers=h)
print(response.text.encode("UTF-8"))

Create a view - jenkins.views.create()

import json
import requests

url = "http://localhost:8080/createView"

str_view_name = "blahblah123"
params = {}  # {'name': str_view_name}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
data = {
    "name": str_view_name,
    "mode": "hudson.model.ListView",
    "Submit": "OK",
    "json": json.dumps(
        {"name": str_view_name, "mode": "hudson.model.ListView"}
    ),
}
# Try 1
result = requests.post(url, params=params, data=data, headers=headers)
print(result.text.encode("UTF-8"))

Run a parameterized build - jenkins.build_job()

import json
import requests

toJson = {"parameter": [{"name": "B", "value": "xyz"}]}
url = "http://localhost:8080/job/ddd/build"
# url = 'http://localhost:8000'
headers = {"Content-Type": "application/x-www-form-urlencoded"}
form = {"json": json.dumps(toJson)}
response = requests.post(url, data=form, headers=headers)
print(response.text.encode("UTF-8"))

How JenkinsAPI logs in with authentication

from jenkinsapi import jenkins

J = jenkins.Jenkins("http://localhost:8080", username="sal", password="foobar")
J.poll()
print(J.items())

How JenkinsAPI watches post requests

import http.server as SimpleHTTPServer
import socketserver
import logging
import cgi

PORT = 8081  # <-- change this to be the actual port you want to run on
INTERFACE = "localhost"


class ServerHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
    def do_GET(self):
        logging.warning("======= GET STARTED =======")
        logging.warning(self.headers)
        SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)

    def do_POST(self):
        logging.warning("======= POST STARTED =======")
        logging.warning(self.headers)
        form = cgi.FieldStorage(
            fp=self.rfile,
            headers=self.headers,
            environ={
                "REQUEST_METHOD": "POST",
                "CONTENT_TYPE": self.headers["Content-Type"],
            },
        )
        logging.warning("======= POST VALUES =======")
        for item in form.list:
            logging.warning(item)
        logging.warning("\n")
        SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)


Handler = ServerHandler

httpd = socketserver.TCPServer(("", PORT), Handler)

print(
    "Serving at: http://%(interface)s:%(port)s"
    % dict(interface=INTERFACE or "localhost", port=PORT)
)
httpd.serve_forever()