【问题标题】:Pylint error from Jenkins/Sonarqube来自 Jenkins/Sonarqube 的 Pylint 错误
【发布时间】:2018-07-09 16:56:37
【问题描述】:

尝试扫描我的 python 项目时,我从声纳扫描仪收到以下错误。我已经检查并安装了 python,我可以从命令行运行它。看来它已正确添加到路径变量中。知道这里发生了什么,或者要检查什么吗?如果有帮助的话,Jenkins 和 sonarqube 正在同一台服务器上运行。

无法运行程序“pylint”:错误=2,没有这样的文件或目录

> 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

jenkins/sonarqube 服务器上 pylint 版本命令的输出

> 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)]

【问题讨论】:

  • jenkins 机器上缺少 pylint 包。
  • pylint 似乎已正确安装。检查更新的帖子
  • SonarQube 需要配置吗?我想知道为什么它没有任何路径显示`pylint`。可能是 jenkins PATH 不包括 pylint 目录。

标签: python jenkins sonarqube sonarqube-scan pylint


【解决方案1】:

SonarPython 未能执行“pylint”进程。

您应该尝试找到“pylint”可执行文件,例如:

> which pylint
/usr/local/bin/pylint

然后使用 sonar.python.pylint 属性明确提供 SonarPython 的 pylint 路径,例如:

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

文档:Pylint Report

如果带有 'sonar.python.pylint' 属性,SonarPython 仍然无法启动 pylint。然后您可以在 SonarScanner 之前自己运行 pylint,并使用 sonar.python.pylint.reportPath 属性将 pylint 结果路径提供给 SonarPython,例如:

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

【讨论】:

  • 如果有人关心的话,这对于在系统某处的 virtualenv 中安装了 Pylint 的 TFS/Azure DevOps 来说效果很好。
【解决方案2】:

使用上述属性创建一个名为 sonar-project.properties 的文件:

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

请注意,所有报告都将写入 pylint-report.txt

与詹金斯一起运行:

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

之后,您可以将 pylint-report.txt 与此 docker 映像 https://github.com/spujadas/sonar-runner-docker 一起发送到您的声纳

【讨论】:

    猜你喜欢
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 2016-06-01
    • 2019-06-28
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    相关资源
    最近更新 更多