2016-08-05 4 views
1

に失敗した場合でも、私はtravis.ymlに私のテストを実行している場所です成功:TravisCIビルドはテストが

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

シェルスクリプトdocker-test.shは、次のようになります。

#!/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 

TravisCIビルドでも成功を収めていますテストが失敗した場合。

テストが失敗したかどうかをTravisCIに通知するにはどうすればよいですか?これがDockerから伝播されないエラー、シェルスクリプトから伝播されないエラー、TravisCIがテストが成功するか失敗するかを知らないという問題があるかどうかはわかりません。

答えて

3

スクリプトは、最後のコマンドdocker rm -fv testのステータスコードで終了しています。

テストのステータスコードをキャプチャし、ドッキングをクリーンアップして終了する必要があります。

このコード例は、少し異なるquestion over hereのものですが、同じ解決策です。

#!/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

なぜクリーンアップを機能に移動しましたか?それが必要だったのか、それともスタイルの好みなのでしょうか? – user1283776

+0

docker stop testとdocker rm -f testについて、なぜかっこを入れましたか?私はこれらのコマンドがサブシェルで実行されることを理解しています。それをする利点は何ですか? – user1283776

+0

クリーンアップ機能は、どのステップが失敗しても、ドッカーは後で 'トラップ 'によってクリーンアップされます。 – Matt

関連する問題