bash - 即使测试失败,TravisCI构建也会成功

标签 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 "-------------------------------------------------"
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,然后退出。

此代码示例来自略有不同的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=$?

关于bash - 即使测试失败,TravisCI构建也会成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38783751/

相关文章:

python - 为什么 pyenv 在 Alpine Linux 下找不到 openssl 共享库?

linux - 替换/插入一行到文件末尾

Bash:在长时间自动完成期间显示进度指示器

linux - 变量的 IF 运算

linux - 如何在使用 linux shell 时过滤多个文件并消除重复条目以选择单个条目

shell - 在别名中使用其他命令

regex - Bash shell - 从保存在字符串中的文件夹中提取目录名

linux - 存储在终端上执行的命令的输出

docker - 在 Docker 中运行 Raku 笔记本

docker - 清理一半下载的Docker镜像