2012-01-13 1 views
3

방금 ​​Google 앱용 젠킨스 CI 서버를 설정했습니다. HiringThingJenkins가 빌드가 실패했다는 것을 내 레이크 작업을 통해 어떻게 알 수 있습니까?

코드가 Google Github 레포에 체크인 될 때 ​​자동으로 시작되는 모든 기능이 잘 작동합니다.

문제는 빌드 실패를 감지하는 것입니다. Jenkins가 명령 줄에서 실행하는 다음 레이크 작업이 있습니다.

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 

내가 테스트가 제대로 실행되고 있는지 확인 한 다음 (Xvfb가로 사용하여 헤드리스 파이어 폭스)를 실행 . 일반적인 레일 유닛, 기능 및 통합 테스트 (이 작업 전에 Jenkins에서 "rake test"를 실행합니다)에서 작동하는 것으로 보입니다.

위의 스크립트는 실패한 종료 코드를 전달하지 않습니다. Jenkins에게 루비 작업에 대한 이유는 없습니다. 현재 제가 생각할 수있는 유일한 해결책은 모든 테스트 결과를 버퍼로 리디렉션하고 grep을 사용하여 실패 키워드를 찾아 실패한 종료 코드를 전달하는 것입니다.하지만 이는 나에게 해로운 느낌입니다.

"system 'rvmsudo ruby'+ r"명령이 실패한 종료 코드를 반환 할 때 Jenkins가 감지하도록하려면 무엇을 변경해야합니까?

UPDATE

robertodecurnex이 올바른지, 시스템은 항상 성공을 반환합니다. 그러나 rake 명령 'sh'를 사용하면 정확한 코드를 캡처 할 수 있습니다. 이것에

system 'rvmsudo ruby ' + r 

: 그래서이 변경 페일 코드 레이크를 종료하고 빌드가 성공하지 않았다 젠킨스를 경고하여 트릭을 수행 할 것으로 보인다

sh 'rvmsudo ruby ' + r do |ok, res| 
    raise "Failed test." if !ok 
end 

.

답변

4

system 호출이 실패하더라도 작업이 정상 실행 상태를 반환합니다.

CI 서버에 문제가 있음을 알리려면 프로세스가 오류 실행 코드를 반환해야합니다.

예를 들어 오이와 rspec은 어떤 경우에 오류가있는 경우 불어납니다.

system 호출 반환 값을 확인하고 동일한 루비 프로세스 내에서 작업을 반환하거나 테스트를 실행하고 system 다른 루비 스크립트를 호출하지 말아야합니다.

관련 문제