Как сделать так, чтобы Jenkins отображался с ошибкой, если один из тестов муравья не прошел - PullRequest
2 голосов
/ 13 июля 2011

У меня есть несколько тестов, которые должны быть выполнены независимо от успеха друг друга, и я хочу, чтобы Дженкинс / Хадсон отобразил красный индикатор, если хотя бы один из этих тестов не удался. Моя текущая (упрощенная для ясности) конфигурация выглядит следующим образом:

ci.sh

...
ant
...

build.xml :

...        
<target name="AllTests">
    <antcall target="TestA"/>
    <antcall target="TestB"/>
    <antcall target="TestC"/>
</target>

<target name="TestA">
    ...
    <exec executable="..." failonerror="false"/>
    ...
</target>

<target name="TestB">
    ...
    <exec executable="..." failonerror="false"/>
    ...
</target>

<target name="TestC">
    ...
    <exec executable="..." failonerror="false"/>
    ...
</target>
...

Как я могу сделать так, чтобы все тесты выполнялись в любом случае, но муравей / Дженкинс должен потерпеть неудачу, если хотя бы один из трех не прошел?

Ответы [ 6 ]

1 голос
/ 14 июля 2011

Я нашел задачу parallel с числом потоков, установленным на "1", в качестве приемлемого обходного пути.Это не идеально, но изменение в build.xml минимально:

build.xml :

...        
<target name="AllTests">
    <parallel threadCount="1" timeout="900000">
        <antcall target="TestA"/>
        <antcall target="TestB"/>
        <antcall target="TestC"/>
    </parallel>
</target>

<target name="TestA">
    ...
    <exec executable="..." failonerror="false"/>
    ...
</target>

<target name="TestB">
    ...
    <exec executable="..." failonerror="false"/>
    ...
</target>

<target name="TestC">
    ...
    <exec executable="..." failonerror="false"/>
    ...
</target>
...
1 голос
/ 14 июля 2011

Я бы установил переменную в вашем ant-скрипте и сделал бы выход ant-сценария с этой переменной, если тест не пройден.Задания Jenkins не выполняются, если код выхода не равен нулю.Как ниже:

#!/bin/bash
zero="0"

*** run your ant script ***

if [$? -gt $zero]; # check to see if exit code of ant script is great than zero
then
    exit(5) # non-zero exit means failure.
else
    echo Success
    exit(0)
fi
0 голосов
/ 23 февраля 2017

Просто добавив мою точку зрения: если вы хотите вручную выполнить задачу ANT и хотите, чтобы ваша задача jenkins не сработала.

Тогда вы можете использовать что-то вроде

<fail status="-1" message="" />

jenkins jobsна основе кода ошибки, возвращенного задачей Ant.

0 голосов
/ 10 июля 2016

Вы можете установить Log Parser Plugin для сбоя сборки по определенному шаблону в журнале консоли.

Таким образом, все сценарии могут выполняться, но сборка может завершиться неудачей в конце при возникновении ошибок/ предупреждения появляются в разделе журнала (который можно настроить для печати).

Правила можно настроить в файле правил синтаксического анализа , например:

# match line starting with 'error ', case-insensitive
error /(?i)^error /

# list of warnings here...
warning /[Ww]arning/
warning /WARNING/

Если у вас есть 3 сценария и Jenkins прекращает сборку 1-го, вы можете добавить #!/bin/sh -x в Execute shell , чтобы не останавливаться на первой ошибке ииспользуйте вышеупомянутый Log Parser плагин для сбоя сборки в конце.

См. также: Как / когда Execute Shell помечает сборку как сбой в Jenkins?

0 голосов
/ 27 сентября 2012

Это последовательное решение для муравьев, но оно немного меняет ваше build.xml. Он использует временный файл, чтобы отметить, что один тест не пройден.

<?xml version="1.0" encoding="UTF-8"?>
<project name="project" default="AllTests">
    <property name="test-failed.file.path" location="test.failed" />

    <macrodef name="checkTestResult">
        <sequential>
            <condition property="allOK">
                <equals arg1="${test.result}" arg2="0" />
            </condition>
            <antcall target="-create-test-failed-file" />
        </sequential>
    </macrodef>

    <target name="-create-test-failed-file" unless="${allOK}">
        <touch file="${test-failed.file.path}" />
    </target>

    <target name="AllTests">
        <delete file="${test-failed.file.path}" />

        <antcall target="TestA" />
        <antcall target="TestB" />
        <antcall target="TestC" />

        <available file="${test-failed.file.path}" property="oneTestFailed" />
        <delete file="${test-failed.file.path}" />
        <fail if="${oneTestFailed}" message="At least one test failed" />
    </target>

    <target name="TestA">
        <exec executable="hostname"
              failonerror="false"
              resultproperty="test.result" />
        <checkTestResult />
    </target>

    <target name="TestB">
        <!-- This one fails -->
        <exec executable="hostname"
              failonerror="false"
              resultproperty="test.result">
            <arg value="--NoSuchOption" />
        </exec>
        <checkTestResult />
    </target>

    <target name="TestC">
        <exec executable="hostname"
              failonerror="false"
              resultproperty="test.result" />
        <checkTestResult />
    </target>
</project>
0 голосов
/ 09 мая 2012

А? AFAIK, ant по умолчанию не останавливается на неудачах теста или тестовых ошибках. А Хадсону / Дженкинсу можно посоветовать впоследствии собирать отчеты о тестировании JUnit и изменять состояние сборки в зависимости от результатов теста ... (есть хотя бы один плагин для Jenkins, который позволяет вам устанавливать водяные знаки)

См. http://ant.apache.org/manual/Tasks/junit.html - haltonfailure и haltonerror по умолчанию отключены.

...