1.1.0 • Published 3 months ago

jenkins v1.1.0

Weekly downloads
37,387
License
MIT
Repository
github
Last release
3 months ago

Jenkins

This is a Node.js client for Jenkins.

Documentation

Common Options

These options will be passed along with any call, although only certain endpoints support them.

  • depth (Number, default: 0): how much data to return (see depth control)
  • tree (String, optional): path expression (see Jenkins API documentation for more information)

Jenkins(options)

Initialize a new Jenkins client.

Options

  • baseUrl (String): Jenkins URL
  • crumbIssuer (Boolean, default: true): enable CSRF Protection support
  • formData (Function, optional): enable file upload support on parameterized builds (must pass in require('form-data') as value for this option)
  • headers (Object, optional): headers included in every request
  • and more via papi

Usage

import Jenkins from "jenkins";

const jenkins = new Jenkins({
  baseUrl: "http://user:pass@localhost:8080",
});

jenkins.info(callback)

Get server information.

Usage

await jenkins.info();

Result

{
  "assignedLabels": [{}],
  "description": null,
  "jobs": [
    {
      "color": "blue",
      "name": "example",
      "url": "http://localhost:8080/job/example/"
    }
  ],
  "mode": "NORMAL",
  "nodeDescription": "the master Jenkins node",
  "nodeName": "",
  "numExecutors": 2,
  "overallLoad": {},
  "primaryView": {
    "name": "All",
    "url": "http://localhost:8080/"
  },
  "quietingDown": false,
  "slaveAgentPort": 12345,
  "unlabeledLoad": {},
  "useCrumbs": false,
  "useSecurity": false,
  "views": [
    {
      "name": "All",
      "url": "http://localhost:8080/"
    }
  ]
}

jenkins.build.get(options)

Get build information.

Options

  • name (String): job name
  • number (Integer): build number

Usage

await jenkins.build.get("example", 1);

Result

{
  "actions": [],
  "buildable": true,
  "builds": [
    {
      "number": 1,
      "url": "http://localhost:8080/job/example/1/"
    }
  ],
  "color": "blue",
  "concurrentBuild": false,
  "description": "",
  "displayName": "example",
  "displayNameOrNull": null,
  "downstreamProjects": [],
  "firstBuild": {
    "number": 1,
    "url": "http://localhost:8080/job/example/1/"
  },
  "healthReport": [
    {
      "description": "Build stability: No recent builds failed.",
      "iconUrl": "health-80plus.png",
      "score": 100
    }
  ],
  "inQueue": false,
  "keepDependencies": false,
  "lastBuild": {
    "number": 1,
    "url": "http://localhost:8080/job/example/1/"
  },
  "lastCompletedBuild": {
    "number": 1,
    "url": "http://localhost:8080/job/example/1/"
  },
  "lastFailedBuild": null,
  "lastStableBuild": {
    "number": 1,
    "url": "http://localhost:8080/job/example/1/"
  },
  "lastSuccessfulBuild": {
    "number": 1,
    "url": "http://localhost:8080/job/example/1/"
  },
  "lastUnstableBuild": null,
  "lastUnsuccessfulBuild": null,
  "name": "example",
  "nextBuildNumber": 2,
  "property": [],
  "queueItem": null,
  "scm": {},
  "upstreamProjects": [],
  "url": "http://localhost:8080/job/example/"
}

jenkins.build.log(options)

Get build log.

Options

  • name (String): job name
  • number (Integer): build number
  • start (Integer, optional): start offset
  • type (String, enum: text, html, default: text): output format
  • meta (Boolean, default: false): return object with text (log data), more (boolean if there is more log data), and size (used with start to offset on subsequent calls)

Usage

await jenkins.build.log("example", 1);

jenkins.build.logStream(options)

Get build log stream.

Options

  • name (String): job name
  • number (Integer): build number
  • type (String, enum: text, html, default: text): output format
  • delay (Integer, default: 1000): poll interval in milliseconds

Usage

const log = jenkins.build.logStream("example", 1);

log.on("data", (text) => {
  process.stdout.write(text);
});

log.on("error", (err) => {
  console.log("error", err);
});

log.on("end", () => {
  console.log("end");
});

jenkins.build.stop(options)

Stop build.

Options

  • name (String): job name
  • number (Integer): build number

Usage

await jenkins.build.stop("example", 1);

jenkins.build.term(options)

Terminates build.

Options

  • name (String): job name
  • number (Integer): build number

Usage

await jenkins.build.term("example", 1);

jenkins.credentials.create(options)

Create credentials in a folder or system.

Options

  • folder (String): path of the folder or manage for system credentials
  • store (String): the credentials store, can be either folder or system
  • domain (String): the credentials domain
  • xml (String): configuration XML

Usage

await jenkins.credentials.create("folder", "store", "domain", "xml");

jenkins.credentials.exists(options)

Check if credentials exist in a folder or system.

Options

  • id (String): the id of the credentials
  • folder (String): path of the folder or manage for system credentials
  • store (String): the credentials store, can be either folder or system
  • domain (String): the credentials domain

Usage

await jenkins.credentials.exists("id", "folder", "store", "domain");

jenkins.credentials.config(options)

Get XML configuration of credentials.

Options

  • id (String): the id of the credentials
  • folder (String): path of the folder or manage for system credentials
  • store (String): the credentials store, can be either folder or system
  • domain (String): the credentials domain

Usage

await jenkins.credentials.config("id", "folder", "store", "domain");

jenkins.credentials.config(options)

Update credentials.

Options

  • id (String): the id of the credential
  • folder (String): path of the folder or manage for system credentials
  • store (String): the credentials store, can be either folder or system
  • domain (String): the credentials domain
  • xml (String): configuration XML

Usage

await jenkins.credentials.update("id", "folder", "store", "domain", "xml");

jenkins.credentials.destroy(options)

Delete credentials from folder or system.

Options

  • id (String): the id of the credential
  • folder (String): path of the folder or manage for system credentials
  • store (String): the credentials store, can be either folder or system
  • domain (String): the credentials domain

Usage

await jenkins.credentials.destroy("id", "folder", "store", "domain");

jenkins.credentials.list(options)

Get a list of credentials in a folder or system.

Options

  • folder (String): path of the folder or manage for system credentials
  • store (String): the credentials store, can be either folder or system
  • domain (String): the credentials domain

Usage

await jenkins.credentials.list("folder", "store", "domain");

jenkins.job.build(options)

Trigger build.

Options

  • name (String): job name
  • parameters (Object, optional): build parameters
  • token (String, optional): authorization token

Usage

await jenkins.job.build("example");
await jenkins.job.build({
  name: "example",
  parameters: { name: "value" },
});
await jenkins.job.build({
  name: "example",
  parameters: { file: fs.createReadStream("test.txt") },
});

jenkins.job.config(options)

Get job XML configuration.

Options

  • name (String): job name

Usage

await jenkins.job.config("example");

jenkins.job.config(options)

Update job XML configuration.

Options

  • name (String): job name
  • xml (String): configuration XML

Usage

await jenkins.job.config("example", xml);

jenkins.job.copy(options)

Create job by copying existing job.

Options

  • name (String): new job name
  • from (String): source job name

Usage

await jenkins.job.copy("fromJob", "example");

jenkins.job.create(options)

Create job from scratch.

Options

  • name (String): job name
  • xml (String): configuration XML

Usage

await jenkins.job.create("example", xml);

jenkins.job.destroy(options)

Delete job.

Options

  • name (String): job name

Usage

await jenkins.job.destroy("example");

jenkins.job.disable(options)

Disable job.

Options

  • name (String): job name

Usage

await jenkins.job.disable("example");

jenkins.job.enable(options)

Enable job.

Options

  • name (String): job name

Usage

await jenkins.job.enable("example");

jenkins.job.exists(options)

Check job exists.

Options

  • name (String): job name

Usage

await jenkins.job.exists("example");

jenkins.job.get(options)

Get job information.

Options

  • name (String): job name

Usage

await jenkins.job.get("example");

Result

{
  "actions": [],
  "buildable": true,
  "builds": [
    {
      "number": 1,
      "url": "http://localhost:8080/job/example/1/"
    }
  ],
  "color": "blue",
  "concurrentBuild": false,
  "description": "",
  "displayName": "example",
  "displayNameOrNull": null,
  "downstreamProjects": [],
  "firstBuild": {
    "number": 1,
    "url": "http://localhost:8080/job/example/1/"
  },
  "healthReport": [
    {
      "description": "Build stability: No recent builds failed.",
      "iconUrl": "health-80plus.png",
      "score": 100
    }
  ],
  "inQueue": false,
  "keepDependencies": false,
  "lastBuild": {
    "number": 1,
    "url": "http://localhost:8080/job/example/1/"
  },
  "lastCompletedBuild": {
    "number": 1,
    "url": "http://localhost:8080/job/example/1/"
  },
  "lastFailedBuild": null,
  "lastStableBuild": {
    "number": 1,
    "url": "http://localhost:8080/job/example/1/"
  },
  "lastSuccessfulBuild": {
    "number": 1,
    "url": "http://localhost:8080/job/example/1/"
  },
  "lastUnstableBuild": null,
  "lastUnsuccessfulBuild": null,
  "name": "example",
  "nextBuildNumber": 2,
  "property": [],
  "queueItem": null,
  "scm": {},
  "upstreamProjects": [],
  "url": "http://localhost:8080/job/example/"
}

jenkins.job.list(callback)

List jobs.

Options

  • name (String, optional): folder name

Usage

await jenkins.job.list();

Result

[
  {
    "color": "blue",
    "name": "example",
    "url": "http://localhost:8080/job/example/"
  }
]

jenkins.label.get(options)

Get label information.

Options

  • name (String): label name

Usage

await jenkins.label.get("master");

Result

{
  "_class": "hudson.model.labels.LabelAtom",
  "actions": [],
  "busyExecutors": 0,
  "clouds": [],
  "description": null,
  "idleExecutors": 2,
  "loadStatistics": {
    "_class": "hudson.model.Label$1"
  },
  "name": "master",
  "nodes": [
    {
      "_class": "hudson.model.Hudson",
      "nodeName": ""
    }
  ],
  "offline": false,
  "tiedJobs": [],
  "totalExecutors": 2,
  "propertiesList": []
}

jenkins.node.config(options)

Get node XML configuration.

Options

  • name (String): node name

Usage

await jenkins.node.config("example");

jenkins.node.create(options)

Create node.

Options

  • name (String): node name

Usage

await jenkins.node.create("node-name");

jenkins.node.destroy(options)

Delete node.

Options

  • name (String): node name

Usage

await jenkins.node.destroy("node-name");

jenkins.node.disconnect(options)

Disconnect node.

Options

  • name (String): node name
  • message (String, optional): reason for being disconnected

Usage

await jenkins.node.disconnect("node-name", "no longer used");

jenkins.node.disable(options)

Disable node.

Options

  • name (String): node name
  • message (String, optional): reason for being disabled

Usage

await jenkins.node.disable("node-name", "network failure");

jenkins.node.enable(options)

Enable node.

Options

  • name (String): node name

Usage

await jenkins.node.enable("node-name");

jenkins.node.exists(options)

Check node exists.

Options

  • name (String): node name

Usage

await jenkins.node.exists("node-name");

jenkins.node.get(options)

Get node information.

Options

  • name (String): node name

Usage

await jenkins.node.get("node-name");

Result

{
  "actions": [],
  "displayName": "node-name",
  "executors": [{}, {}],
  "icon": "computer-x.png",
  "idle": true,
  "jnlpAgent": true,
  "launchSupported": false,
  "loadStatistics": {},
  "manualLaunchAllowed": true,
  "monitorData": {
    "hudson.node_monitors.ArchitectureMonitor": null,
    "hudson.node_monitors.ClockMonitor": null,
    "hudson.node_monitors.DiskSpaceMonitor": null,
    "hudson.node_monitors.ResponseTimeMonitor": {
      "average": 5000
    },
    "hudson.node_monitors.SwapSpaceMonitor": null,
    "hudson.node_monitors.TemporarySpaceMonitor": null
  },
  "numExecutors": 2,
  "offline": true,
  "offlineCause": null,
  "offlineCauseReason": "",
  "oneOffExecutors": [],
  "temporarilyOffline": false
}

jenkins.node.list(callback)

List all nodes.

Options

  • full (Boolean, default: false): include executor count in response

Usage

await jenkins.node.list();

Result

{
  "busyExecutors": 0,
  "computer": [
    {
      "actions": [],
      "displayName": "master",
      "executors": [{}, {}],
      "icon": "computer.png",
      "idle": true,
      "jnlpAgent": false,
      "launchSupported": true,
      "loadStatistics": {},
      "manualLaunchAllowed": true,
      "monitorData": {
        "hudson.node_monitors.ArchitectureMonitor": "Linux (amd64)",
        "hudson.node_monitors.ClockMonitor": {
          "diff": 0
        },
        "hudson.node_monitors.DiskSpaceMonitor": {
          "path": "/var/lib/jenkins",
          "size": 77620142080
        },
        "hudson.node_monitors.ResponseTimeMonitor": {
          "average": 0
        },
        "hudson.node_monitors.SwapSpaceMonitor": {
          "availablePhysicalMemory": 22761472,
          "availableSwapSpace": 794497024,
          "totalPhysicalMemory": 515358720,
          "totalSwapSpace": 805302272
        },
        "hudson.node_monitors.TemporarySpaceMonitor": {
          "path": "/tmp",
          "size": 77620142080
        }
      },
      "numExecutors": 2,
      "offline": false,
      "offlineCause": null,
      "offlineCauseReason": "",
      "oneOffExecutors": [],
      "temporarilyOffline": false
    },
    {
      "actions": [],
      "displayName": "node-name",
      "executors": [{}, {}],
      "icon": "computer-x.png",
      "idle": true,
      "jnlpAgent": true,
      "launchSupported": false,
      "loadStatistics": {},
      "manualLaunchAllowed": true,
      "monitorData": {
        "hudson.node_monitors.ArchitectureMonitor": null,
        "hudson.node_monitors.ClockMonitor": null,
        "hudson.node_monitors.DiskSpaceMonitor": null,
        "hudson.node_monitors.ResponseTimeMonitor": {
          "average": 5000
        },
        "hudson.node_monitors.SwapSpaceMonitor": null,
        "hudson.node_monitors.TemporarySpaceMonitor": null
      },
      "numExecutors": 2,
      "offline": true,
      "offlineCause": null,
      "offlineCauseReason": "",
      "oneOffExecutors": [],
      "temporarilyOffline": false
    }
  ],
  "displayName": "nodes",
  "totalExecutors": 2
}

jenkins.plugin.list(callback)

List plugins (note: depth defaults to 1).

Usage

await jenkins.plugin.list();

Result

[
  {
    "active": true,
    "backupVersion": null,
    "bundled": false,
    "deleted": false,
    "dependencies": [{}, {}, {}, {}, {}, {}, {}, {}],
    "downgradable": false,
    "enabled": true,
    "hasUpdate": false,
    "longName": "Email Extension Plugin",
    "pinned": false,
    "shortName": "email-ext",
    "supportsDynamicLoad": "MAYBE",
    "url": "http://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin",
    "version": "2.53"
  }
]

jenkins.queue.list(callback)

List queues.

Usage

await jenkins.queue.list();

Result

{
  "items": [
    {
      "actions": [
        {
          "causes": [
            {
              "shortDescription": "Started by user anonymous",
              "userId": null,
              "userName": "anonymous"
            }
          ]
        }
      ],
      "blocked": true,
      "buildable": false,
      "buildableStartMilliseconds": 1389418977387,
      "id": 20,
      "inQueueSince": 1389418977358,
      "params": "",
      "stuck": false,
      "task": {
        "color": "blue_anime",
        "name": "example",
        "url": "http://localhost:8080/job/example/"
      },
      "url": "queue/item/20/",
      "why": "Build #2 is already in progress (ETA:N/A)"
    }
  ]
}

jenkins.queue.item(options)

Lookup a queue item.

Options

  • number (Integer): queue item number

Usage

await jenkins.queue.item(130);

Result

{
  "actions": [
    {
      "causes": [
        {
          "shortDescription": "Started by user anonymous",
          "userId": null,
          "userName": "anonymous"
        }
      ]
    }
  ],
  "blocked": false,
  "buildable": false,
  "id": 130,
  "inQueueSince": 1406363479853,
  "params": "",
  "stuck": false,
  "task": {
    "name": "test-job-b7ef0845-6515-444c-96a1-d2266d5e0f18",
    "url": "http://localhost:8080/job/test-job-b7ef0845-6515-444c-96a1-d2266d5e0f18/",
    "color": "blue"
  },
  "url": "queue/item/130/",
  "why": null,
  "executable": {
    "number": 28,
    "url": "http://localhost:8080/job/test-job-b7ef0845-6515-444c-96a1-d2266d5e0f18/28/"
  }
}

jenkins.queue.cancel(options)

Cancel build in queue.

Options

  • number (Integer): queue item id

Usage

await jenkins.queue.cancel(23);

jenkins.view.config(options)

Get view XML configuration.

Options

  • name (String): job name

Usage

await jenkins.view.config("example");

jenkins.view.config(options)

Update view XML configuration.

Options

  • name (String): job name
  • xml (String): configuration XML

Usage

await jenkins.view.config("example", xml);

jenkins.view.create(options)

Create view.

Options

  • name (String): view name
  • type (String, enum: list, my): view type

Usage

await jenkins.view.create("example", "list");

jenkins.view.destroy(options)

Delete view.

Options

  • name (String): view name

Usage

await jenkins.view.destroy("example");

jenkins.view.exists(options)

Check view exists.

Options

  • name (String): view name

Usage

await jenkins.view.exists("example");

jenkins.view.get(options)

Get view information.

Options

  • name (String): view name

Usage

await jenkins.view.get("example");

Result

{
  "description": null,
  "jobs": [
    {
      "name": "test",
      "url": "http://localhost:8080/job/example/",
      "color": "blue"
    }
  ],
  "name": "example",
  "property": [],
  "url": "http://localhost:8080/view/example/"
}

jenkins.view.list(callback)

List all views.

Usage

await jenkins.view.list();

Result

{
  "views": [
    {
      "url": "http://localhost:8080/",
      "name": "All"
    },
    {
      "url": "http://localhost:8080/view/example/",
      "name": "Test"
    }
  ],
  "useSecurity": false,
  "useCrumbs": false,
  "unlabeledLoad": {},
  "slaveAgentPort": 0,
  "quietingDown": false,
  "primaryView": {
    "url": "http://localhost:8080/",
    "name": "All"
  },
  "assignedLabels": [{}],
  "mode": "NORMAL",
  "nodeDescription": "the master Jenkins node",
  "nodeName": "",
  "numExecutors": 2,
  "description": null,
  "jobs": [
    {
      "color": "notbuilt",
      "url": "http://localhost:8080/job/example/",
      "name": "test"
    }
  ],
  "overallLoad": {}
}

jenkins.view.add(options)

Add job to view.

Options

  • name (String): view name
  • job (String): job name

Usage

await jenkins.view.add("example", "jobExample");

jenkins.view.remove(options)

Remove job from view.

Options

  • name (String): view name
  • job (String): job name

Usage

await jenkins.view.remove("example", "jobExample");

Test

Run unit tests

$ npm test

Run acceptance tests

$ docker compose -f test/compose.yml up -d --build
$ npm run acceptance
$ docker compose -f test/compose.yml down

License

This work is licensed under the MIT License (see the LICENSE file).

Notes

python-jenkins (BSD License, see NOTES) was used as a reference when implementing this client and its create/reconfigure job XML was used in the tests.

1.1.0

3 months ago

1.0.2

11 months ago

1.0.1

2 years ago

1.0.0

2 years ago

0.28.1

4 years ago

0.28.0

4 years ago

0.27.0

5 years ago

0.26.0

5 years ago

0.25.0

5 years ago

0.24.0

5 years ago

0.23.0

5 years ago

0.22.1

6 years ago

0.22.0

6 years ago

0.21.0

6 years ago

0.20.1

6 years ago

0.20.0

7 years ago

0.19.0

8 years ago

0.18.0

8 years ago

0.17.0

8 years ago

0.16.0

8 years ago

0.15.0

8 years ago

0.14.0

8 years ago

0.13.0

8 years ago

0.12.0

8 years ago

0.11.0

8 years ago

0.10.1

9 years ago

0.10.0

9 years ago

0.9.0

9 years ago

0.8.0

9 years ago

0.7.0

9 years ago

0.6.1

10 years ago

0.6.0

10 years ago

0.5.0

10 years ago

0.4.1

10 years ago

0.4.0

10 years ago

0.3.0

10 years ago

0.2.1

10 years ago

0.2.0

10 years ago

0.1.0

10 years ago

0.0.3

11 years ago

0.0.2

12 years ago

0.0.1

12 years ago