Violations插件使用错误的路径来查找pep8报告

问题描述 投票:0回答:1

我正在使用pytest运行pep8检查(下面列出的所有内容都发生在Windows机器上):

py.test --pep8 --junitxml=reports\pep8.log

我设置了一个工作来查找reports \ pep8.log中的pep8.log文件

但是当我运行这份工作时,我发现违规插件寻找报告的路径毫无意义:

生成的xml文件:C:\ Jenkins \ jobs \ python-template-2 \ workspace \ reports \ pep8.log =============== 89失败,33跳过,1错误1.48秒================

C:\ Jenkins \ jobs \ python-template-2 \ workspace> exit 1构建步骤'ВыполнитькомандуWindows'标记构建为失败错误:发布者hudson.plugins.violations.ViolationsPublisher由于异常java.io.FileNotFoundException而中止:C: \詹金斯\作业\蟒模板-2 \构建\ 2013-10-22_13-30-44 \侵犯\文件\ <\失败> <\测试用例> C:\詹金斯\作业\蟒模板-2 \工作空间\在java.io.FileOutputStream的java.io.FileOutputStream.open(本机方法)中的contests \ migration \ 0003_auto__add_votinghistory.py.xml(文件名中的语法错误。)(java.io.FileOutputStream中的未知来源)。(未知来源)at hudson.pilegins.violations.gene上的hudson.pilegins.violations.generate.ExecuteFilePath.execute(ExecuteFilePath.java:40)中的hudson.FilePath.write(FilePath.java:1642)(GenerateXML.java:47) at hudson.plugins.violations.ViolationsCollector.invoke(ViolationsCollector.java:122)at hudson.plugins.violations.ViolationsCollector.invoke(ViolationsCollector.java:25)at hud son.FilePath.act(FilePath.java:912)位于hudson.pilegin.inform(ViolationsPublisher.java:74)的hudson.FilePath.act(FilePath.java:885)hudson.tasks.BuildStepMonitor $ 3。执行(BuildStepMonitor.java:45)hudson.model.AbstractBuild $ AbstractBuildExecution.perform(AbstractBuild.java:781)at hudson.model.AbstractBuild $ AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:753)at hudson.model.Build $ BuildExecution .post2(Build.java:183)hudson.model.AbstractBuild $ AbstractBuildExecution.post(AbstractBuild.java:706)at hudson.model.Run.execute(Run.java:1690)at hudson.model.FreeStyleBuild.run( FreeStyleBuild.java:46)at hudson.model.ResourceController.execute(ResourceController.java:88)at hudson.model.Executor.run(Executor.java:230)完成:FAILURE

另外,我试图在不使用pytest的情况下启动pep8检查,而是使用此命令来查找和检查所有.py文件:

FOR /R %i IN (*.py) DO pep8 %i  1>>reports\pep8.log 

在这种情况下,我得到以下内容:

C:\ Jenkins \ jobs \ python-template-2 \ workspace> exit 1构建步骤'ВыполнитькомандуWindows'标记构建为失败错误:发布者hudson.plugins.violations.ViolationsPublisher由于异常java.io.FileNotFoundException而中止:C: \ Jenkins \ jobs \ python-template-2 \ builds \ 2013-10-15_13-31-37 \ violation \ file \ C:\ Jenkins \ jobs \ python-template-2 \ workspace \ notifications \ email.py.xml( java.io.FileOutputStream中的java.io.FileOutputStream.open(Native Method)中的语法错误。(java.io.FileOutputStream。(未知来源)。在hudson.FilePath.write上的(未知来源)。(FilePath.java: 1666)在hudson.plugins.Vergins.Vergins.VerlationsCollector.invoke上的hudson.plugins.violations.generate.GenerateXML.execute(GenerateXML.java:47)中的hudson.plugins.violations.generate.ExecuteFilePath.execute(ExecuteFilePath.java:40) (ViolationsCollector.java:122)位于hudson.File的hudson.pilegins.VerlationCollector.invoke(ViolationsCollector.java:25)hudson.FilePath.act(FilePath.java:916) Path.act(FilePath.java:889)位于hudson.model.AbstractBuild $的hudson.plugins.vioform.ViolationsPublisher.perform(ViolationsPublisher.java:74)hudson.tasks.BuildStepMonitor $ 3.perform(BuildStepMonitor.java:45)在hudson.model.AbstractBuild的hudson.model.Build $ BuildExecution.post2(Build.java:183)的hudson.model.AbstractBuild $ AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:758)上的AbstractBuildExecution.perform(AbstractBuild.java:786) $ abstractBuildExecution.post(AbstractBuild.java:711)at hudson.model.Run.execute(Run.java:1690)at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)at hudson.model.ResourceController.execute( ResourceController.java:88)at hudson.model.Executor.run(Executor.java:246)完成:失败

python windows jenkins pytest pep8
1个回答
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)

您应该能够根据您的具体用例进行调整。

© www.soinside.com 2019 - 2024. All rights reserved.