gpt4 book ai didi

ruby-on-rails-3 - Jenkins 在单元测试失败时成功(Rails)

转载 作者:行者123 更新时间:2023-12-04 01:30:43 25 4
gpt4 key购买 nike

我几乎没有开始使用 Jenkins,这是我迄今为止遇到的第一个问题。基本上,即使在某些测试中发生错误,我的 jenkins 工作也总是会成功。这是我在 shell 配置中运行的内容:

bundle install 
rake db:migrate:reset
rake test:units
rake spec:models

事情是 Jenkins 只在失败的任务是最后一个时才报告失败。例如,如果我将“rake test:units”放在最后一个任务中,它会在出现问题时通知错误。使用此配置,我只会收到 rspec 测试的错误报告,而不会收到单元测试的错误报告。

任何想知道为什么我不只使用 rspec 或单元测试的人,我们目前正在迁移到 rspec 但这个问题仍然很痛苦。

这是 Jenkinsm 日志的一部分,因为您可以看到其中一个单元测试失败,但 jenkins 仍然成功完成。
314 tests, 1781 assertions, 1 failures, 0 errors, 0 skips
rake aborted!
Command failed with status (1): [/var/lib/jenkins/.rvm/rubies/ruby-1.9.3-p1...]

Tasks: TOP => test:units
(See full trace by running task with --trace)
Lot of rspec tests here....
Finished in 3.84 seconds
88 examples, 0 failures, 42 pending
Pushing HEAD to branch master of origin repository
Pushing HEAD to branch master at repo origin
Finished: SUCCESS

最佳答案

Jenkins 执行您在 Build Step 框中键入的命令,方法是将它们写入临时文件,然后使用 /bin/sh -xe 运行脚本。 .

通常这会产生预期的效果:命令按顺序执行(并打印),并且脚本在命令失败时立即中止,即以非零退出代码退出。

如果您没有发生这种情况,唯一的原因可能是您已覆盖此行为。您可以通过使用以下两个字符开始构建步骤的第一行来覆盖它:#! .

例如,如果您的构建步骤如下所示:

#!/bin/bash
bundle install
rake db:migrate:reset
rake test:units
rake spec:models

那么这意味着 Jenkins 会将脚本写入一个临时文件,并使用 /bin/bash 执行该脚本。 .当这样调用时,bash 将一个一个地执行命令而不关心它们是否成功。 bash 进程的退出代码将是脚本中最后一个命令的退出代码,并且在脚本结束时 Jenkins 会看到。

因此,请注意您在构建步骤的第一行中放置的内容。如果您不知道 shell 是如何工作的,根本不要使用 hash-bang,让 Jenkins 决定脚本应该如何运行。

如果您需要更多地控制构建步骤的执行方式,您应该研究您使用的 shell 的手册页,以了解如何使其按照您想要的方式运行。 Jenkins 在这里没有太大的作用。它只是按照你想要的方式执行你想要的 shell。

关于ruby-on-rails-3 - Jenkins 在单元测试失败时成功(Rails),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11464883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com