【问题标题】:How do I fix ENOENT in the tmp directory when running tests on TeamCity?在 TeamCity 上运行测试时,如何修复 tmp 目录中的 ENOENT?
【发布时间】:2020-02-02 00:39:22
【问题描述】:

我已设置 TeamCity 来为我们的代码库运行测试。时不时地,一些测试以Minitest::UnexpectedError: Errno::ENOENT: No such file or directory @ dir_initialize 失败。这只发生在使用tmp 目录(缓存或在那里创建文件)的测试中,并且这些测试随机失败(90+% 的时间它们都很好)。我在本地从来没有遇到过这个错误。

我尝试将mkdir tmp 添加到控制台构建步骤中,但这只会导致构建失败,因为目录存在。我想知道 TeamCity 是否以某种方式弄乱了构建中的目录。我们正在使用 Rails 4.2.11.1、Ruby 2.4.6、minitest 5.11.3 和 TeamCity 2019.1.1

我不确定如何解决这个问题 - 有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 teamcity minitest


    【解决方案1】:

    我通常看到的是 /tmp 即使在 Rails 服务器重新启动时也不会在本地清除。但是,在 CI 上运行是不同的,因为它们通常会为每次 CI 运行分配不同的机器。测试可能失败的一些情况:

    1. 如果您的测试直接依赖于 `/tmp' 中的某些文件。
    2. 如果您的某些测试依赖于在/tmp 中生成文件的其他测试用例的 o/p

    请记住,CI 可能会在多台服务器上并行运行您的套件,因此这是需要考虑的另一件事。这就是为什么随机运行测试被认为是一种好的做法的原因。

    希望这会有所帮助!

    【讨论】:

    • 谢谢,它们是一些有用的指点。我们确实有依赖于/tmp 的测试——这些测试在这里失败了。我不认为有任何“链接”测试,但我会好好看看。我将考虑重构或尝试确保正确处理/tmp。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 2016-09-03
    • 2010-12-26
    相关资源
    最近更新 更多