CruiseControl.rb

852 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
852
On SlideShare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

CruiseControl.rb

  1. 1. CruiseControl.rb serwer Continuous Integration napisany w Ruby.Szybki do zainstalowania, prosty w użyciu i łatwy do hackowania
  2. 2. Co to jest Continuous Integration ?"Continuous Integration (CI) jest praktykątworzenia oprogramowania w której cały zespółczęsto integruje swoją pracę zazwyczaj każdyprogramista integruje przynajmniej raz dziennieprowadząc do wielokrotnych integracji w ciągudnia.Każda integracja jest weryfikowana przezautomatyczny build (zawierający testy) aby wykryćbłędy integracji tak szybko jak to jest możliwe."-- Martin Fowler
  3. 3. Po co mi to ?PRZECIW: ZA:- mamy testy - i cruise z nich korzysta- wykonuje je przy każdym - napewno?commit- każdy w moim zespole - taaaak, a świstak siedzi isprawdza czy jego kod nie ...powoduje problemów zinnymi częściamiZ MOJEGO DOŚWIADCZENIA:- jestem leniwy, kiedy testy trwaja 15 minut nie chce mi się ichwykonywać przy każdej zmianie- do tego przez te 15 min zajmują mase ramu i wciągają kilkardzeni CPU, niech jakaś inna maszyna się tym zajmuje
  4. 4. CruiseControl.rb - wymaganiawersja 1.4.0, June 30, 2009- napisana na Railsach 1.2.3- Ruby 1.8.7wersja master na github, November 12, 2010- napisana na Railsach 2.3.2- Ruby 1.8.7- Ruby 1.9.1 (przy niewielkim wysiłku ~10minut można odpalić)dla potrzeb prezentacji skorzystam z 1.4.0
  5. 5. CruiseControl.rb - instalacja:~/workspace$ tar -zxvf cruisecontrol-1.4.0.tgz:~/workspace$ cd cruisecontrol-1.4.0:~/workspace/cruisecontrol-1.4.0$:~/workspace/cruisecontrol-1.4.0$ ./cruise add cc-rails -r/home/lowang/workspace/cc-rails/ -s gitAdding project cc-rails (this may take a while)...cruise data root = /home/lowang/.cruiseProject cc-rails added.
  6. 6. CruiseControl.rb - uruchomienie:~/workspace/cruisecontrol-1.4.0$ ./cruise startcruise data root = /home/lowang/.cruise=> Booting WEBrick...cruise data root = /home/lowang/.cruise=> Rails application started on http://0.0.0.0:3333=> Ctrl-C to shutdown server; call with --help for optionsBuilder for project cc-rails startedLogging to: /home/lowang/workspace/cruisecontrol-1.4.0/log/cc-rails_builder.logBuild 543f9a2 startedBuild 543f9a2 FAILED
  7. 7. FAIL ? przecież u mnie działa!:~/workspace/cc-rails$ rake test(in /home/lowang/workspace/cc-rails)Loaded suite /home/lowang/.rvm/gems/ruby-1.9.2-p136/gems/rake-0.8.7/lib/rake/rake_test_loaderStarted.Finished in 0.138515 seconds.1 tests, 1 assertions, 0 failures, 0 errors, 0skipsTest run options: --seed 26288
  8. 8. sprawdzamy wynik na stronie http://0.0.0.0:3333
  9. 9. "use the right tool for the job", czyli tym młotkiem tego gwoździa nie wbijesz... ruby 1.8.7 na którym działa CCRb nie zbuduje projektu Rails 3.0.3 na Ruby 1.9.2
  10. 10. CruiseControl.rb - ustawienia1. jak powiedzieć Cruise aby używał Ruby 1.9.2 ?odnajdujemy plik settings z poprzedniego slajdu::~/workspace/cc-rails$ vim ~/.cruise/projects/cc-rails/cruise_config.rb2. project.build_command - tak, tego szukamy!3. ustawiamy na rvm 1.9.2 rake db:migrate test
  11. 11. CruiseControl.rb - działa!
  12. 12. Psujemy!class Sample < ActiveRecord::Base def power_of_value value*value endendzamieniamy na:class Sample < ActiveRecord::Base def power_of_value value*2 endend:~/workspace/cc-rails$ git commit -m"zmianadzialania power_of_value" app/models/sample.rb[master ee82820] zmiana dzialania power_of_value 1 files changed, 1 insertions(+), 1 deletions(-)
  13. 13. CruiseControl.rb - działa!
  14. 14. CruiseControl.rb - kto na to będziepatrzył cały czas ?nikt, dlatego CCRb wysyła powiadomienia:1. emailem:[CruiseControl] importrb build 26376 failedThe build failed.CHANGES-------New revision 26376 detectedRevision 26376 committed by pwroblewski on 2011-02-10 11:13:53mniejsza ilosc rekordow w tabeli category_with_property_valueM /importrb/trunk/config/deploy.ymlSee http://cruise.local/builds/importrb/26376 for details.
  15. 15. 2. RSS-em:
  16. 16. CruiseControl.rb"narzędzie do Ruby nie nada się do innych języków" - obalamy mity!
  17. 17. CruiseControl.rb - PHPStackTest.php:<?phpclass StackTest extends PHPUnit_Framework_TestCase{ public function testPushAndPop() { $stack = array(); $this->assertEquals(0, count($stack)); array_push($stack, foo); $this->assertEquals(foo, $stack[count($stack)-1]); $this->assertEquals(1, count($stack)); $this->assertEquals(foo, array_pop($stack)); $this->assertEquals(0, count($stack)); }}?>:~/workspace/cc-php$ phpunit StackTest.phpPHPUnit 3.4.13 by Sebastian Bergmann..Time: 0 seconds, Memory: 6.50MbOK (1 test, 5 assertions):~/workspace/cc-php$ echo $?0
  18. 18. CruiseControl.rb - PHP:~/workspace/cruisecontrol-1.4.0$ ./cruise add cc-php -r/home/lowang/workspace/cc-php/ -s gitAdding project cc-php (this may take a while)...cruise data root = /home/lowang/.cruiseProject cc-php added.$ vim ~/.cruise/projects/cc-php/cruise_config.rb# ustawiam build_command naproject.build_command = phpunit StackTest.php
  19. 19. CruiseControl.rb - PHP
  20. 20. CruiseControl.rb przetestuje każdy projekt któryda się opisać komendą lub seriąkomend zapisanych w skrypcie i zwróci wartość exit code > 0 w przypadku błędu
  21. 21. CruiseControl.rb - testowanie różnychwersji środowiska Jedna maszyna niby może uruchamiać testyRubiego w nastu wersjach i patchlevelach, może mieć X wersji PHP, itd. Teoretyczne da się to zrobić, ale środowisko w którym działają testy powinno odwzorowywaćśrodowisko produkcyjne, jeśli na produkcji nie macie takiego zlepku jak napisałem powyżej to lepiej tego nie tworzyć dla testów.
  22. 22. CruiseControl.rb - testowanie zdalnePierwsza z opcji wykonywania testów w wyizolowanymśrodowisku to wykonujemy testy na innych maszynach niżdziała cruise1. ssh na serwer zdalny (wirtualizacja!)- zakładamy klucze ssh aby łączyć się bez hasłateraz wystarczy zmienić project.build_command np.:ssh cruise-wpmatic "cd wpmatic; exportRAILS_ENV=test; export TESTOPTS=-v; bundleinstall; rake db:drop db:create db:migratetest"
  23. 23. CruiseControl.rb - testowanie lokalneJeśli mamy tylko 1 serwer do dyspozycji możemy skorzystać zchrootowania i trzymać zamknięte wersje środowiskpodkatalogach, jedynie wersja kernela i załadowane modułybędą współdzielone2. chroot (czyli pseudowirtualizacja)ustawiamy project.build_command aby wykonywał testy wchroocie
  24. 24. CruiseControl.rbWięcej na:http://martinfowler.com/articles/continuousIntegration.htmlhttp://cruisecontrolrb.thoughtworks.com/https://github.com/thoughtworks/cruisecontrol.rbhttp://www.slideshare.net/lowangKontakt do mnie:przemyslaw.wroblewski@gmail.com

×