Sends Jenkins build metrics into InfluxDB


InfluxDB Plugin allows you to send various metrics to InfluxDB. The plugin gets its data from the other results published by Jenkins. For example, unit test results are received from the JUnit Plugin and Robot Framework results from the Robot Framework Plugin etc.

From version 1.13 onwards different plugins are listed as optional dependencies. In order to get rid of mandatory dependency errors, InfluxDB plugin must be re-installed.

Supported Metrics

MeasurementDataRelated plugin
  • Build number
  • Project name
  • Project path

  • Build health
  • Build status message
  • Build time
  • Build Agent name
  • Job duration
  • Build result
  • Build result ordinal (0=Stable, 1=Unstable, 2=Failure, 3=Not built, 4=Aborted)
  • Successful build boolean
  • Last stable build number (or 0 if never)
  • Last successful build number (or 0 if never)
  • Tests failed (unit test results from JUnit Plugin)
  • Tests skipped (unit test results from JUnit Plugin)
  • Tests total (unit test results from JUnit Plugin)
  • Time in queue (from Metrics plugin)
  • Build scheduled time
  • Build start time
  • Build measured time

JUnit Plugin

Metrics Plugin

  • Package coverage %
  • Class coverage %
  • Line coverage %
  • Branch coverage %
  • Amount of packages
  • Amount of source files
  • Amount of classes
Cobertura Plugin
  • Test case name
  • Suite name
  • Duration
  • Amount of suites
  • Amount of passed tests
  • Amount of failed tests
  • Amount of total tests
  • Pass percentage of all tests
  • Amount of passed critical tests
  • Amount of failed critical tests
  • Total amount of critical tests
  • Pass percentage of critical tests
Robot Framework Plugin

Same as rf_results except:

  • Pass percentage of all tests
  • Pass percentage of critical tests
  • Test case name
Robot Framework Plugin

Same as rf_results except:

  • Pass percentage of all tests
  • Pass percentage of critical tests
  • Test case name
  • Suite name
  • Amount of suites

Extra data sent for this measurement:

  • Tag name
Robot Framework Plugin

Same as rf_results except:

  • Amount of suites
  • Amount of total tests
  • Pass percentage of critical tests
  • Total amount of critical tests
  • Pass percentage of all tests
Robot Framework Plugin
  • Package coverage %
  • Class coverage %
  • Line coverage %
  • Branch coverage %
  • Method coverage %
  • Instruction coverage %
Jacoco Plugin
  • Total amount of errors
  • Percentage of errors
  • Average sample duration
  • Max/min sample duration
  • Size of samples
  • Total count of samples
  • 90 percentile
Performance Plugin


  • Amount of major/minor/critical/blocker/info issues
  • Lines of code
  • Build display name
  • Affected files
  • Commit authors
  • Commit messages
  • Commit count
  • Number of total/executed/not-executed/passed/failed/success/true-false tests
  • Best compile time test value/name
  • Worst compile time test value/name
  • Average compile time
  • Best performance test value/name
  • Worst performance test value/name
  • Average performance
  • Best execution time test value/name
  • Worst execution time test value/name
Perfpublisher Plugin
  • Metric name
  • Average value for metric
  • worst value for metric
  • best value for metric
Perfpublisher Plugin
  • Test name
  • Was test successful/executed
  • Test message
  • Compile time
  • Execution time
  • Performance
Perfpublisher Plugin
  • Test name
  • Metric name/value/relevancy
Perfpublisher Plugin


Create a database in InfluxDB and a user with rights to your database. In Jenkins, go to Manage Jenkins > Configure System and click new influxdb target. Provide the database information to Jenkins. The url parameter needs the whole url of the influxDB database, including the http:// and the database port. Also, provide the retention policy you want the data to be stored in Influxdb (e.g. 15m or 2d for 15 minutes or 2 days respectively). By default, the retention policy is infinite. Exceptions generated by InfluxDB plugin can also be ignored by unselecting the exposeExceptions checkbox.

In your job, select Publish build data to InfluxDb target from the post-build actions.

Select the InfluxDB target you wish to publish the data.


The plugin can be used in pipelines by calling the step function, e.g.

step([$class: 'InfluxDbPublisher',
        customData: null,
        customDataMap: null,
        customPrefix: null,
        target: 'local influxDB',
		selectedTarget: 'local influxDB', // OPTIONAL, recommended if you have multiple InfluxDB targets configured to ensure you write to correct target
		jenkinsEnvParameterTag: 'KEY=' + env.PARAM,		// OPTIONAL, custom tags
		jenkinsEnvParameterField: 'KEY=' + env.PARAM, // OPTIONAL, custom fields
		measurementName: 'myMeasurementName', // OPTIONAL, custom measurement name
		replaceDashWithUnderscore: true, // OPTIONAL, replace "-" with "_" for tag names. Default=false

customData and customDataMap are custom data generated during the build and not by the plugin. customPrefix is added to the beginning of the measurements. target takes the value of your description in your Global configuration.

NOTE! Up to release 1.10.3, pipeline was configured with the use the url and database.

step([$class: 'InfluxDbPublisher',
        customData: null,
        customDataMap: null,
        customPrefix: null,
        target: ',jenkins_db'])

This form of configuration is not supported from version 1.11 onwards.

Pipelines don't have post-build actions, so the build result, build ordinal, and the build success boolean must be set manually. They will default to "?", 5, and false respectively unless set before calling the step. The boolean value is set according to the ordinal value and the ordinal value is fetched according to build result, so only the build result have to be set manually. Also, the build status will appear as "?" and the build duration might be a little off, because the build is not actually finished. If you want to get those pieces of information you need to configure the plugin separately on each job as a post-build action. The jobs can be run with, for example, the Build Pipeline Plugin to get data from all jobs to InfluxDB. Alternatively, you can insert the information in your build manually inside your Groovy script.

try {
    // Build things here
    if(currentBuild.result == null) {
        currentBuild.result = "SUCCESS"	// sets the ordinal as 0 and boolean to true
} catch (err) {
    if(currentBuild.result == null) {
        currentBuild.result = "FAILURE"	// sets the ordinal as 4 and boolean to false
    throw err
} finally {
    step([$class: 'InfluxDbPublisher', ...

From version 1.19 onwards, it's also possible to create and remove targets in pipelines.

// Get Influxdb plugin descriptor
def influxdb = Jenkins.instance.getDescriptorByType(jenkinsci.plugins.influxdb.DescriptorImpl)

// Create target
def target = new jenkinsci.plugins.influxdb.models.Target()

// Set target details
// Mandatory fields
target.description = 'myNewTarget'
target.url = ''
target.username = 'myUsername'
target.password = 'myPassword'
target.database = 'myDatabase'
// Optional fields
target.exposeExceptions = true  // default = true
target.jobScheduledTimeAsPointsTimestamp = true  // default = false
target.usingJenkinsProxy = true // default = false
target.retentionPolicy = '1d' // default = 'autogen'
// NEW in version 1.20.1
target.replaceDashWithUnderscore = true // default = false

// Add a target by using the created target object

// Write stuff to InfluxDB
// NOTE! If you have more targets configured in Jenkins, it's safer to add "selectedTarget" parameter to the InfluxDB step to ensure
// data is sent to the correct target.
// step([$class: 'InfluxDbPublisher', target: 'myNewTarget', selectedTarget: 'myNewTarget', customPrefix: 'myPrefix', customData: myDataMap])

// Remove a target by using the target description field value

Custom Data

You can create custom data in Jenkins pipelines. Custom data can be written to Influx like this:

def myDataMap = [:]
myDataMap['myKey'] = 'myValue'
step([$class: 'InfluxDbPublisher', target: myTarget, customPrefix: 'myPrefix', customData: myDataMap])

This adds the key myKey with a value myValue to a measurement called jenkins_custom_data.

You can also create your own measurements with customDataMaps:

def myDataMap1 = [:]
def myDataMap2 = [:]
def myCustomDataMap = [:]
myDataMap1["myMap1Key1"] = 11 //first value of first map
myDataMap1["myMap1Key2"] = 12 //second value of first map
myDataMap2["myMap2Key1"] = 21 //first value of second map
myDataMap2["myMap2Key2"] = 22 //second value of second map
myCustomDataMap["series1"] = myDataMap1
myCustomDataMap["series2"] = myDataMap2
step([$class: 'InfluxDbPublisher', target: myTarget, customPrefix: 'myPrefix', customDataMap: myCustomDataMap])

This creates measurements series1 and series2 and adds the keys myMap1Key1 and myMap1Key2 with values 11 and 12 respectively to series1; and myMap2Key1 and myMap2Key2 with values 21 and 22 respectively to series2.

You can also set tags for your custom measurements with either customDataTags or customDataMapTags. Tags added with customDataTags are added to the measurement jenkins_custom_data. If you use customDataMapTags you must use the same map keys as the measurement names in customDataMap.

You can also set a custom measurement name for your jenkins_data and jenkins_custom_data measurements. To do this you must add

measurementName: "measurementName_data"

inside your InfluxDbPublisher build step. This will change the name of your jenkins_data measurement into measurementName_data and jenkins_custom_data into custom_measurmentName_data.

Release catalogue

1.20.4 (20.2.2019)

1.20.3 (5.2.2019)

1.20.2 (14.12.2018)

1.20.1 (29.11.2018)

1.20 (4.10.2018)

1.19 (5.9.2018)

1.18 (15.8.2018)

1.17 (29.6.2018)

1.16 (4.6.2018)

1.15 (11.5.2018)

1.14 (13.2.2018)

1.13.2 (23.1.2018)

1.13.1 (20.12.2017)

1.13 (20.12.2017)

1.12.3 (30.6.2017)

1.12.2 (21.6.2017)

1.12.1 (26.5.2017)

1.12 (15.5.2017)

1.11 (22.3.2017)

1.10.3 (10.2.2017)

1.10.2 (17.1.2017)

1.10.1 (30.12.2016)

1.10 (23.12.2016)

1.9 (8.11.2016)

1.8.1 (28.9.2016)

1.8 (13.9.2016)

1.7 (1.9.2016)

1.6 (10.8.2016)

1.5 (5.8.2016)

1.4 (4.8.2016)

1.3 (26.7.2016)