2016-08-05 94 views
1

這是我正在我的測試中travis.ymlTravisCI生成成功,即使試驗失敗

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

shell腳本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傳播出去,錯誤不會從shell腳本傳播,或者TravisCI不知道何時測試成功或失敗。

回答

3

您的腳本正在退出,並顯示最後一個命令docker rm -fv test的狀態代碼。

您需要捕獲測試的狀態代碼,然後清理docker,然後退出。

此代碼示例來自略有不同的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中放置括號?我知道這些命令然後運行在一個子shell中。這樣做的好處是什麼? – user1283776

+0

清理功能無論哪一步失敗,docker都會通過'trap'清理。 – Matt

相關問題