Bash 即使测试失败,TravisCI构建也会成功
这就是我在Bash 即使测试失败,TravisCI构建也会成功,bash,shell,docker,travis-ci,Bash,Shell,Docker,Travis Ci,这就是我在travis.yml中运行测试的地方: # 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 "-----------------------------------------
travis.yml
中运行测试的地方:
# 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不知道go测试何时成功或失败。您的脚本正在退出,状态代码为最后一个命令
Docker rm-fv test
您需要捕获测试的状态代码,然后清理docker,然后退出
这个代码示例来自稍微不同的解决方案,但它是相同的解决方案
#/usr/bin/env bash
set-e
#设置默认返回码
RC=2
#清理
函数清理{
回显“移除容器”
docker停止测试| |正确
docker rm-f测试| |正确
退出$RC
}
陷阱清理出口
#测试步骤
docker create-it--name测试路径
docker启动测试
docker exec test/bin/sh-c“go test./…”
RC=$?
为什么要将清除移到函数?这是必要的还是仅仅是一种风格偏好?为什么在docker stop测试和docker rm-f测试之间加上括号?我知道这些命令随后会在子shell中运行。这样做的好处是什么?清理功能是这样的,无论哪一步失败,docker都会在之后通过陷阱进行清理。实际上,这是一个错误。正在寻找跳过set-e
结果检查的更快方法stop
和rm
应始终在不导致脚本退出的情况下运行。