Plugin Information |
---|
View JenkinsLint on the plugin site for more information. |
Detects whether your Jenkins configuration follows those best practices
This plugin has mainly two goals:
- To make it easier to detect issues in your Jenkins configuration that will cause Jenkins to blow up when you attempt to run those jobs.
- To encourage discussion within the Jenkins community on the more subjective stuff. Having a set of checks to base discussion on helps drive out what we as a community think is good style.
Summary
Jenkins is an awesome Automation System, and there are a bunch of people using it in different ways, for example: developers, testers, automation, build engineers, release engineers, scrum master, product owner and so on. Unfortunately, as the number of jobs grows, maintaining them becomes tedious, and the paradigm of no using a predefined set of best practices falls apart.
The Jenkins Lint plugin attempts to solve this problem by allowing jobs to be evaluated with some predefined best practices. The goal is for your team to be able to define those best practices to be related to their project.
Manually reviewing those jobs wouldn't be too hard, but doing the same thing all over again for every new job or for a hundred other projects is where it gets difficult and tedious. This provides a much more powerful way of analyzing them.
Usage
You can find it under <jenkins_url>/jenkinslint
or reach it via links in the sidepanel of the main page. You don't need to do anything else, just click on the Jenkins Lint link and those Lint checkers will be shown.
Features
List of available Job checks:
- Artifact Publisher check
- CleanUp Workspace check
- Git Shallow clone check
- Javadoc Publisher check
- Job Assigned Label check
- Master Assigned Label check
- Job Description check
- Job Log Rotator check
- Job Name check
- Maven Job Type check
- Null SCM check
- Polling SCM Trigger check
- Multibranch Job Type check
- Hard-coded Script check
- Gradle Wrapper check
- Built Timeout check
- Git Ref repo check
- Groovy system exit check
- TimerTrigger Hash check
- Git Ref Submodule repo check
- BFA check
List of available Slave checks:
- Slave description check
- Slave label check
- Slave version check
- Windows slave launch check
Planned upcoming features
- Show graphs.
- Configure Checks (change severity)
- Load checks dynamically via Jenkins.
- Load checks dynamically via Reflection.
- Define some kind of programmatically scripts.
- Check: Cyclomatic complexity check
Control comments:
You can ignore a particular check by adding a trailing lint:ignore:<check name> comment to the job description.
Features controlled by system properties
Based on the Features controlled by system properties, you can disable the healthy floating box in the Job Summary Page
Property | Default | Version | Notes |
---|---|---|---|
org.jenkins.ci.plugins.jenkinslint.JobLintAction.disabled | false | 0.9.0 | Deprecated since 0.10.0 |
By default you will see the below view:
If you disabled then:
Enable/Disable with Groovy script
You can easily disable/enable Checkers from the Script console, from version 0.10.0 onwards!
import org.jenkins.ci.plugins.jenkinslint.JenkinsLintGlobalConfiguration import jenkins.model.GlobalConfiguration // Disable Globally JenkinsLintGlobalConfiguration.all().get(JenkinsLintGlobalConfiguration.class).setGlobalEnabled(false) // Disable JobAction JenkinsLintGlobalConfiguration.all().get(JenkinsLintGlobalConfiguration.class).setJobActionEnabled(false) // Disable Lint JenkinsLintGlobalConfiguration.all().get(JenkinsLintGlobalConfiguration.class).setCleanupWorkspaceCheckerEnabled(false) // More properties in the JenkinsLintGlobalConfiguration class: https://github.com/jenkinsci/jenkinslint-plugin/blob/a97f3e17b14d7410164bb4bea50ba5968a3a97b8/src/main/java/org/jenkins/ci/plugins/jenkinslint/JenkinsLintGlobalConfiguration.java#L18-L45
API
You can retrieve jenkins lint defects by requesting the following URLs :
- <jenkins/hudson_url>/jenkinslint/api/json?depth=2&pretty=true
- <jenkins/hudson_url>/jenkinslint/api/xml?depth=2
And also you can retrieve lint defects per job/agents:
- <jenkins/hudson_url>/job/<your_job>/jenkinslint/api/json?depth=2&pretty=true
- <jenkins/hudson_url>/job/<your_job>/jenkinslint/api/xml?depth=2
- <jenkins/hudson_url>/computer/<agent>/jenkinslint//api/json?depth=2&pretty=true
- <jenkins/hudson_url>/computer/<agent>/jenkinslint//api/xml?depth=2
Workaround
There is already a known issue in the initial version 0.1.0 , Workspace Cleanup Plugin is a required dependency otherwise JenkinsLint will fail when analyzing those Jobs
Jul 13, 2015 10:21:06 PM hudson.ExpressionFactory2$JexlExpression evaluate WARNING: Caught exception evaluating: it.data in /jenkinslint/. Reason: java.lang.reflect.InvocationTargetException java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) .... Giant Stacktrack .... at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.NoClassDefFoundError: hudson/plugins/ws_cleanup/WsCleanup$DescriptorImpl at org.jenkins.ci.plugins.jenkinslint.check.CleanupWorkspaceChecker.executeCheck(CleanupWorkspaceChecker.java:22 ) at org.jenkins.ci.plugins.jenkinslint.JenkinsLintAction.getData(JenkinsLintAction.java:60) ... 112 more
There are two workarounds:
- Installing Workspace Cleanup Plugin
- Upgrading the JenkinsLint version
Requirements
Jenkins
Jenkins version 1.580 or newer is required.
Open Issues
Version history
Version 0.11.0 (Upcoming release)
WIP
- Check: Cyclomatic complexity check (issue #42269)
- Fix: Sort column (issue #45880)
Version 0.10.0 (August 1, 2017)
BFA Check (issue #42268)
Git Ref Submodule Check (issue #41528)
Enable/Disable Checks globally/individually from Global Settings (issue #45882)
Hardcoded Script Threshold value is now part of the Global Settings (issue #45882)
Version 0.9.0 (July 27, 2017)
JobAction View (Controlled by System Property) (PR #17)
AgentAction View (PR #17)
RestAPI for the JobAction and AgentAction
Jenkinsfile integration with ci.jenkins.io (PR #18)
Fixed Jelly and XSS prevention
Bumped minimal Jenkins Core version to 1.580
Version 0.8.0 (Mar 7, 2017)
RestAPI. (issue #41449)
TimerTrigger 'Hash' check supporting @ (issue #42337)
Removed dependent plugins. (issue #42383)
Version 0.7.0 (Feb 26, 2017)
Maven and Matrix projects weren't supported when linting some defects (issue #42310)
TimerTrigger 'Hash' check (issue #42267)
i18 support
Version 0.6.0 (Feb 12, 2017)
Git local ref cache repos check (issue #41528)
Groovy system exist check (issue #38617)
Updated pom file (infra #588)
Version 0.5.0 (Oct 1, 2015)
Build Timeout check (issue #30725)
Version 0.4.0 (Aug 27, 2015)
Support Jenkins lint check for Jenkins Slaves (issue #30161)
Version 0.3.0 (Jul 29, 2015)
Gradle Wrapper check (issue #29486)
Version 0.2.0 (Jul 21, 2015)
Health Icons plus percentage (issue #29466)
Refactor: remove optional dependencies (issue #29545) (issue #29544) (issue #29546)
Version 0.1.2 (Jul 15, 2015)
Some builders cannot be cast to hudson.tasks.CommandInterpreter (issue #29427)
HardcodedScript Check supports MatrixProjects (issue #29444)
Create unit test suite for UI
Version 0.1.1 (Jul 14, 2015)
Project dependency with ws-cleanup plugin (issue #29418)
New Check: Hardcoded Script check
Version 0.1.0 (Jul 12, 2015)
Initial release