Мы только что настроили сервер Jenkins CI для нашего приложения, HiringThing
Все работает хорошо, сборки запускаются автоматически при проверке кода в нашем репозитории Github.
Проблема заключается в обнаружении сбоев сборки. У меня есть следующая задача rake, запускаемая из командной строки Дженкинсом.
rake test:browser
выполняет следующее
desc "Run browser tests."
task :browser => :environment do
start = Time.now()
puts "Stopping apache if running"
system 'sudo apache2ctl stop'
puts "Running selenium tests"
Dir.glob('./test/browser/*.rb').each { |r|
puts r
system 'rvmsudo ruby ' + r
}
system 'echo -e "\a"'
puts "All browser tests, elapsed: " + (Time.now() - start).to_s + " seconds"
end
Я подтвердил, что тесты работают правильно (с использованием Firefox без головы с Xvfb). Проблема в том, что Jenkins не обнаруживает никаких ошибок сборки в тестах браузера. Похоже, что он работает с обычными модульными, функциональными и интеграционными тестами Rails (перед этой задачей я запускаю "rake test" в Jenkins.)
Насколько я могу судить, этот скрипт выше не передает код неудачного завершения задач ruby Дженкинсу, не знаю почему. Прямо сейчас единственный обходной путь, который я могу придумать, - это перенаправить весь тестовый вывод в буфер и использовать grep для поиска ключевых слов сбоя и передачи кода сбоя, если он найден, но мне это кажется хакерским.
Что мне нужно изменить, чтобы Дженкинс обнаружил, когда команды "system 'rvmsudo ruby' + r" возвращают ошибочный код выхода?
UPDATE
robertodecurnex правильно, система всегда возвращает успех. Однако команда rake 'sh' позволяет вам записывать точные коды. Поэтому я изменил это:
system 'rvmsudo ruby ' + r
на это:
sh 'rvmsudo ruby ' + r do |ok, res|
raise "Failed test." if !ok
end
Что, похоже, делает свое дело, выйдя из Rake с кодом ошибки и предупредив Дженкинса, что сборка не удалась.