2016-08-05 12 views
1

Dies ist, wo ich meine Tests leite in travis.yml:TravisCI Build erfolgreich, auch wenn Tests fehlschlagen

# Run tests 
script: 
    # Test application in Docker container 
    - ./tools/docker-test.sh 

Das Shell-Skript docker-test.sh wie folgt aussieht:

#!/usr/bin/env bash 

githash="$(git rev-parse --short HEAD)" 

echo "-------------------------------------------------" 
echo "| Running unit tests       |" 
echo "-------------------------------------------------" 

docker create -it --name test eu.gcr.io/test/test:$githash 
docker start test 
docker exec test /bin/sh -c "go test ./..." 
docker stop test 
docker rm -fv test 

Der TravisCI Build ist ein Erfolg auch wenn die Tests fehlschlagen.

Wie kann ich TravisCI dazu bringen zu erfahren, ob der Test fehlgeschlagen ist oder nicht? Ich weiß nicht, ob dies ein Problem mit Fehlern ist, die nicht von Docker übertragen werden, Fehler, die nicht vom Shell-Skript weitergegeben werden, oder TravisCI, die nicht wissen, wann Go-Tests erfolgreich sind oder fehlschlagen.

Antwort

3

Ihr Skript wird mit dem Statuscode des letzten Befehls docker rm -fv test beendet.

Sie müssen den Statuscode des Tests erfassen, dann Docker bereinigen und dann beenden.

Dieses Codebeispiel ist von einem etwas anderen question over here, aber es ist die gleiche Lösung.

#!/usr/bin/env bash 
set -e 

# Set a default return code 
RC=2 

# Cleanup 
function cleanup { 
    echo "Removing container" 
    docker stop test || true 
    docker rm -f test || true 
    exit $RC 
} 
trap cleanup EXIT 

# Test steps 
docker create -it --name test path 
docker start test 
docker exec test /bin/sh -c "go test ./..." 
RC=$? 
+0

Warum haben Sie die Bereinigung in eine Funktion verschoben? War das notwendig oder nur eine Stilvorliebe? – user1283776

+0

Warum haben Sie Klammern um Docker Stop Test und Docker rm -f Test? Ich verstehe, dass diese Befehle dann in einer Subshell ausgeführt werden. Welchen Vorteil hat das? – user1283776

+0

Die Aufräumfunktion ist so, egal was für ein Schritt fehlschlägt, der Docker wird danach über die 'Falle' aufgeräumt. – Matt

Verwandte Themen