简体   繁体   中英

Pylint error from Jenkins/Sonarqube

I am getting the following error from the sonar scanner when trying to scan my python project. I have checked and python is installed, and i can run it from the command line. It appears that it has been added to the path variable properly. Any idea what is going on here, or what to check? Jenkins and sonarqube are running on the same server if that helps any.

Cannot run program "pylint": error=2, No such file or directory

> 10:21:19.572 INFO: Sensor PylintSensor [python]
10:21:19.585 INFO: ------------------------------------------------------------------------
10:21:19.585 INFO: EXECUTION FAILURE
10:21:19.585 INFO: ------------------------------------------------------------------------
10:21:19.585 INFO: Total time: 4.714s
10:21:19.715 INFO: Final Memory: 45M/213M
10:21:19.715 INFO: ------------------------------------------------------------------------
10:21:19.715 ERROR: Error during SonarQube Scanner execution
java.lang.IllegalStateException: Cannot analyse the file '/var/lib/jenkins/workspace/GoogleAnalytics-ETL/GoogleAnalytics-ETL/Authentication/__init__.py', details: 'org.sonar.api.utils.command.CommandException: java.io.IOException: Cannot run program "pylint": error=2, No such file or directory'
    at org.sonar.plugins.python.pylint.PylintSensor.execute(PylintSensor.java:85)
    at org.sonar.scanner.sensor.SensorWrapper.analyse(SensorWrapper.java:53)
    at org.sonar.scanner.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:88)
    at org.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:82)
    at org.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:68)
    at org.sonar.scanner.phases.AbstractPhaseExecutor.execute(AbstractPhaseExecutor.java:88)
    at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:180)
    at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:135)
    at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:121)
    at org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:288)
    at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:283)
    at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:261)
    at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:135)
    at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:121)
    at org.sonar.scanner.task.ScanTask.execute(ScanTask.java:48)
    at org.sonar.scanner.task.TaskContainer.doAfterStart(TaskContainer.java:84)
    at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:135)
    at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:121)
    at org.sonar.scanner.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:121)
    at org.sonar.batch.bootstrapper.Batch.doExecuteTask(Batch.java:116)
    at org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:111)
    at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:63)
    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:498)
    at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
    at com.sun.proxy.$Proxy0.execute(Unknown Source)
    at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:233)
    at org.sonarsource.scanner.api.EmbeddedScanner.runAnalysis(EmbeddedScanner.java:151)
    at org.sonarsource.scanner.cli.Main.runAnalysis(Main.java:123)
    at org.sonarsource.scanner.cli.Main.execute(Main.java:77)
    at org.sonarsource.scanner.cli.Main.main(Main.java:61)
Caused by: org.sonar.api.utils.command.CommandException: java.io.IOException: Cannot run program "pylint": error=2, No such file or directory
    at org.sonar.api.utils.command.CommandExecutor.execute(CommandExecutor.java:102)
    at org.sonar.plugins.python.pylint.PylintArguments.pylintVersion(PylintArguments.java:45)
    at org.sonar.plugins.python.pylint.PylintArguments.<init>(PylintArguments.java:37)
    at org.sonar.plugins.python.pylint.PylintIssuesAnalyzer.<init>(PylintIssuesAnalyzer.java:47)
    at org.sonar.plugins.python.pylint.PylintSensor.analyzeFile(PylintSensor.java:96)
    at org.sonar.plugins.python.pylint.PylintSensor.execute(PylintSensor.java:75)
    ... 32 more
Caused by: java.io.IOException: Cannot run program "pylint": error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
    at org.sonar.api.utils.command.CommandExecutor.execute(CommandExecutor.java:74)
    ... 37 more
Caused by: java.io.IOException: error=2, No such file or directory
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
    at java.lang.ProcessImpl.start(ProcessImpl.java:134)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
    ... 38 more
10:21:19.717 DEBUG: Execution getVersion
10:21:19.717 DEBUG: Execution stop
[Pipeline] }
[Pipeline] // withSonarQubeEnv
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE

output of pylint version command on jenkins/sonarqube server

> pylint --version No config file found, using default configuration
> pylint 1.8.2,  astroid 1.6.1 Python 2.7.12 (default, Nov  2 2017,
> 19:20:38)  [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]

SonarPython failed to execute the "pylint" process.

You should try to locate "pylint" executable, eg:

> which pylint
/usr/local/bin/pylint

Then provide explicitly the pylint path to SonarPython using the sonar.python.pylint property, eg:

sonar.python.pylint=/usr/local/bin/pylint

Documentation: Pylint Report

If with 'sonar.python.pylint' property, SonarPython still cannot start pylint. Then you can run pylint yourself before SonarScanner, and provide the pylint result path to SonarPython using the sonar.python.pylint.reportPath property, eg:

 sonar.python.pylint.reportPath=pylint-reports/pylint-result-*.txt

Create a file called sonar-project.properties with properties above:

sonar.projectKey=br.com.appexample
sonar.projectName=appexample
sonar.projectVersion=1.0
sonar.sources=.
sonar.language=py
sonar.sourceEncoding=UTF-8
sonar.python.pylint.reportPath=pylint-report.txt

Note that all report will be write on pylint-report.txt

Run with jenkins:

docker run --rm -v ${PWD}:/code eeacms/pylint pylint | tee -a pylint-report.txt

After that, you can send the pylint-report.txt to your Sonar with this docker image https://github.com/spujadas/sonar-runner-docker

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM