2016-08-05 40 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

相关问题