我正在使用pytest运行pep8检查(下面列出的所有内容都发生在Windows机器上):
py.test --pep8 --junitxml=reports\pep8.log
我设置了一个作业来查找reports \ pep8.log
中的pep8.log文件但是当我运行这份工作时,我发现违规插件寻找报告的路径毫无意义:
生成的xml文件: C:\詹金斯\工作\ python的模板2 \工作区\报告\ pep8.log =============== 89失败,33跳过,1个错误在1.48秒内================
C:\ Jenkins \ jobs \ python-template-2 \ workspace>退出1构建步骤 'ВыполнитькомандуWindows'标记为构建失败 错误:发布者hudson.plugins.violations.ViolationsPublisher由于异常java.io.FileNotFoundException而中止: C:\詹金斯\作业\蟒模板-2 \构建\ 2013-10-22_13-30-44 \侵犯\文件\< \衰竭及GT;< \&测试用例GT; C:\詹金斯\作业\蟒-模板 - 2个\工作空间\竞赛\迁移\ 0003_auto__add_votinghistory.py.xml (文件名中的语法错误),位于java.io.FileOutputStream.open(Native 方法)在java.io.FileOutputStream。(未知来源)at java.io.FileOutputStream。(未知来源)at hudson.FilePath.write(FilePath.java:1642)at hudson.plugins.violations.generate.ExecuteFilePath.execute(ExecuteFilePath.java:40) 在 hudson.plugins.violations.generate.GenerateXML.execute(GenerateXML.java:47) 在 hudson.plugins.violations.ViolationsCollector.invoke(ViolationsCollector.java:122) 在 hudson.plugins.violations.ViolationsCollector.invoke(ViolationsCollector.java:25) 在hudson.FilePath.act(FilePath.java:912)at hudson.FilePath.act(FilePath.java:885)at hudson.plugins.violations.ViolationsPublisher.perform(ViolationsPublisher.java:74) 在hudson.tasks.BuildStepMonitor $ 3.perform(BuildStepMonitor.java:45) 在 hudson.model.AbstractBuild $ AbstractBuildExecution.perform(AbstractBuild.java:781) 在 hudson.model.AbstractBuild $ AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:753) 在hudson.model.Build $ BuildExecution.post2(Build.java:183)at at hudson.model.AbstractBuild $ AbstractBuildExecution.post(AbstractBuild.java:706) 在hudson.model.Run.execute(Run.java:1690)at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)at at hudson.model.ResourceController.execute(ResourceController.java:88) 在hudson.model.Executor.run(Executor.java:230)完成:失败
另外,我尝试在不使用pytest的情况下启动pep8检查,而是使用此命令来查找和检查所有.py文件:
FOR /R %i IN (*.py) DO pep8 %i 1>>reports\pep8.log
在这种情况下,我得到以下内容:
C:\ Jenkins \ jobs \ python-template-2 \ workspace>退出1构建步骤 'ВыполнитькомандуWindows'标记为构建失败ERROR:Publisher hudson.plugins.violations.ViolationsPublisher由于异常而中止 的 java.io.FileNotFoundException: C:\詹金斯\工作\ python的模板2 \建立\ 2013-10-15_13-31-37 \侵犯\文件\ C:\詹金斯\工作\ python的模板2 \工作区\通知\ email.py。 XML (文件名中的语法错误),位于java.io.FileOutputStream.open(Native 方法)在java.io.FileOutputStream。(未知来源)at java.io.FileOutputStream。(未知来源)at hudson.FilePath.write(FilePath.java:1666)at hudson.plugins.violations.generate.ExecuteFilePath.execute(ExecuteFilePath.java:40) 在 hudson.plugins.violations.generate.GenerateXML.execute(GenerateXML.java:47) 在 hudson.plugins.violations.ViolationsCollector.invoke(ViolationsCollector.java:122) 在 hudson.plugins.violations.ViolationsCollector.invoke(ViolationsCollector.java:25) 在hudson.FilePath.act(FilePath.java:916)at hudson.FilePath.act(FilePath.java:889)at hudson.plugins.violations.ViolationsPublisher.perform(ViolationsPublisher.java:74) 在hudson.tasks.BuildStepMonitor $ 3.perform(BuildStepMonitor.java:45) 在 hudson.model.AbstractBuild $ AbstractBuildExecution.perform(AbstractBuild.java:786) 在 hudson.model.AbstractBuild $ AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:758) 在hudson.model.Build $ BuildExecution.post2(Build.java:183)at at hudson.model.AbstractBuild $ AbstractBuildExecution.post(AbstractBuild.java:711) 在hudson.model.Run.execute(Run.java:1690)at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)at at hudson.model.ResourceController.execute(ResourceController.java:88) 在hudson.model.Executor.run(Executor.java:246)完成:失败
答案 0 :(得分:1)
我在Jenkins使用pylint时遇到了类似的错误。这似乎发生在Windows环境中,并且是Violations插件如何构建路径的问题。如果您在错误中发现错误,则会尝试将您测试的文件的完整路径添加到当前目录(C:\Jenkins\jobs\python-template-2\builds\2013-10-22_13-30-44\violations\file\<\failure>\<\testcase>
)。
为了解决这个问题,我发现了一个小脚本并在测试后运行它。它删除了大部分路径,只留下了可以添加到基本路径的部分,而不会导致文件未找到错误。这是脚本:
with open('.\pylint_report.xml', 'r') as lint_file:
out = ''.join([line.replace('E:\\Jenkins\workspace\\', '')
for line in lint_file.readlines()])
with open('.\pylint_report.xml', 'w') as lint_file:
lint_file.write(out)
您应该能够根据具体用例进行调整。