当前位置: 首页 > 知识库问答 >
问题:

为什么pitest在命令行中与maven合作,而不是在Jenkins管道中?

吕子真
2023-03-14

我这里有一个奇怪的问题,我找不到原因:

在命令行上将pitest与maven(和java 11)结合使用时,它会按预期工作,但在Jenkins服务器上通过声明性管道运行时,会导致错误。

来自maven pom的部分:

<build>
  <plugins>
    <plugin>
      <groupId>org.pitest</groupId>
      <artifactId>pitest-maven</artifactId>
      <version>1.4.8</version>
      <dependencies>
        <dependency>
          <groupId>org.pitest</groupId>
          <artifactId>pitest-junit5-plugin</artifactId>
          <version>0.8</version>
        </dependency>
      </dependencies>
      <configuration>
        <verbose>true</verbose>
      </configuration>
    </plugin>
  </plugins>
</build>

我的Jenkinsfile的一部分:

stage('MutationTesting')
 {
  steps
   {
    bat 'mvn --batch-mode org.pitest:pitest-maven:mutationCoverage'
   }
 }

在此之前,将从管道调用以下maven命令:

mvn——批处理模式清洁

批处理模式编译

mvn——批处理模式编译器:testCompile surefire:test-Dmaven。测验失败忽略=真

当在命令行上准确地调用这些命令时,pitest可以完美地工作。

当比较日志记录结果时,它们几乎相等。

命令行的日志输出:

矿井

矿井

矿井

矿井

矿井

矿井

矿井

矿井

矿井

矿井

矿井

矿井

矿井

矿井

矿井

矿井

[…产量削减]

Jenkins管道的日志输出:

矿井

矿井

矿井

矿井

矿井

矿井

矿井

矿井

矿井

矿井

矿井

矿井

矿井

所以我只能假设环境是不同的,但哪一个呢?或者它是一只可怜的虫子?

共有1个答案

弘康安
2023-03-14

最有可能的问题是,jenkins正在一个尚未编译测试的环境中执行Pitest。

最可靠的方法是将pitest绑定到概要文件中的测试阶段,而不是直接调用目标。

<profile>
  <id>pitest</id>
    <build>
      <plugins>
        <plugin>
          <groupId>org.pitest</groupId>
          <artifactId>pitest-maven</artifactId>
          <version>1.4.8</version>
          <executions>
            <execution>
              <id>pitest</id>
              <phase>test</phase>
              <goals>
                <goal>mutationCoverage</goal>
              </goals>
            </execution>
          </executions>  
        </plugin>
      </plugins>

然后,Pitest就可以运行了

mvn -Ppitest test
 类似资料:
  • 问题内容: 是否可以在管道常规脚本中直接调用PowerShell命令?在Jenkins中使用自定义作业时,我可以使用PowerShell插件调用该命令。但是在groovy脚本中没有片段可以使用它。 我也尝试过,但似乎此命令不允许在命令中包含多行和注释。 问题答案: 要从Groovy脚本调用PowerShell脚本,请执行以下操作: 您必须使用命令。 之后,您必须确保正确返回错误代码()变量(应导致

  • 问题内容: 在groovy脚本中(用于jenkins管道):如何运行命令而不是命令? 我尝试了以下方法: 在通话中致电“ ” : 将呼叫替换为呼叫: 附加信息: 我的命令比命令更复杂。 问题答案: 您提供的Groovy脚本正在将结果脚本中的第一行格式化为空白行。shebang告诉脚本使用/ bin / bash而不是/ bin / sh运行,它需要位于文件的第一行,否则它将被忽略。 因此,您应该这

  • 问题内容: 我目前正在尝试从管道中将groovy脚本作为节点之一运行,但是遇到了以下错误: 另外,我尝试以Groovy的方式安装插件,但由于某种原因,它将无法安装。每当我刷新工具页面时,安装程​​序就会消失。我安装groovy错误吗?请帮忙! 编辑:相关数据 而且ideainspect.groovy文件是shebang的可执行文件,这可能是问题所在。 问题答案: 您的jenkins用户在使用它时会

  • 问题内容: 您是否知道如何在内部执行AWS CLI命令以构建管道?我没有找到任何插件 问题答案: 首先,您需要在服务器上安装aws cli,并确保jenkins用户有权运行它。 或者在创建EC2实例时简单地使用Amazon AMI,它附带了aws cli。 使用适当的策略为角色分配实例。(在aws configure中使用用户密钥更简单) 在管道步骤中使用

  • 问题内容: 我想在Jenkins管道中运行像这样的嵌套shell命令: 不幸的是,当我将其格式化为管道语法时: Jenkins似乎无法正确运行它们,但是输出: 我试图在bash下运行命令,如下所示: 在jenkins管道上运行bash命令, 但最终遇到类似的问题。任何想法如何解决这个问题? 问题答案: 如果将shell命令扩展为两行,这对于Jenkins Pipeline来说将变得更加容易: 第一

  • 我使用Jenkins在docker容器中使用以下命令 码头工人拉詹金斯/詹金斯 docker run-p8080:8080--name=jenkins master jenkins/jenkins 获取此错误 calc.py/var/jenkins_home/workspace/pythoncalculator@tmp/耐用-b7e99e01/脚本。sh:1:/var/jenkins\u home