作业终止后的JaCoCo内存分配

时间:2017-03-14 13:03:03

标签: maven jenkins jacoco jacoco-maven-plugin

上周,我在与 Jenkins 合作时发现了一个奇怪的时刻。 在我的多模块项目中,我在Jenkins中使用 Jacoco测试覆盖率 Jacoco-plugin

我在Jenkins开始工作,当谈到测试阶段时,将创建Jacoco流程,在执行作业后,流程将被关闭。但是当工作被强制处于测试阶段时,唯一的方法是终止作业。但在这种情况下,即使在Jenkins重启之后,Jacoco流程也不会被关闭。 唯一的办法就是杀死这个过程。

我有一台Jenkins在我的物理机器上运行,另一台在docker中运行。两种情况都会出现问题。

这是我在父pom.xml中的Jacoco配置,但我确信这不是重点。:

<plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.7.7.201606060606</version>
            <configuration>
                <excludes>
                    <exclude>**/*Builder.class</exclude>
                </excludes>
            </configuration>
            <executions>
                <execution>
                    <id>default-prepare-agent</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>default-prepare-agent-integration</id>
                    <goals>
                        <goal>prepare-agent-integration</goal>
                    </goals>
                </execution>
                <execution>
                    <id>default-report</id>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
                <execution>
                    <id>default-report-integration</id>
                    <goals>
                        <goal>report-integration</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

是否有人遇到过同样的问题,或者有一些提示或猜测?

1 个答案:

答案 0 :(得分:1)

我还没有找到解决这个问题的具体方法,但我已经建立了一个小的解决方法。也许它会对某人有用。

重点是创建一个每小时运行一个脚本的作业。该脚本正在检查是否有一些jacoco进程运行时间超过3600秒并将其终止。

剧本:

#!/bin/bash

PROCESS_NAME=jacoco
MAX_TIME=3600

echo "Searching for  $PROCESS_NAME processes running for more than $MAX_TIME seconds"

pgrep -f $PROCESS_NAME | while read pid 
do
    running_time=$(ps -feo "etimes=" $pid | sed -e 's/ //g')
    if [ $running_time -gt $MAX_TIME ]
    then
        echo "killing the process with $pid"
        kill $pid
    fi       
done