В процессе разработки проекта на Ruby 1.9 нам потребовалось использовать систему непрерывной интеграции.
CruiseControl.rb в своё время не подошёл из-за несовместимости с Ruby 1.9, в результате мы остановились на бесплатной TeamCity Professional под Linux.
Начальная настройка тривиальна, потребует лишь распаковки дистрибутивов TeamCity и JRE, а также настройки переменной JRE_HOME.
Прямо из коробки мы можем получить запуск тестов Test::Unit, RSpec, с оценкой покрытия rcov.
Но нам потребовалось большее, например, использовать кастомные тесты.
Рассмотрим тривиальный пример — тесты на компилируемость (например, исходного кода, файлов в формате YAML etc.).
Естественным способом для запуска наших тестов будет использование Rake. Вот пример задачи для типичного Rails-приложения:
Теперь создаём проект TeamCity с целью rake compile и вуаля, всё работает;)
______________________
CruiseControl.rb в своё время не подошёл из-за несовместимости с Ruby 1.9, в результате мы остановились на бесплатной TeamCity Professional под Linux.
Начальная настройка тривиальна, потребует лишь распаковки дистрибутивов TeamCity и JRE, а также настройки переменной JRE_HOME.
Прямо из коробки мы можем получить запуск тестов Test::Unit, RSpec, с оценкой покрытия rcov.
Но нам потребовалось большее, например, использовать кастомные тесты.
Рассмотрим тривиальный пример — тесты на компилируемость (например, исходного кода, файлов в формате YAML etc.).
Естественным способом для запуска наших тестов будет использование Rake. Вот пример задачи для типичного Rails-приложения:
- module TeamCity
- class Messaging
- class << self
- def teamcity?
- defined?(Rake::TeamCityApplication)
- end
- def method_missing(symbol, *args)
- Rake::TeamCityApplication.send_msg(
- Rake::TeamCityApplication.tc_message_factory.send(symbol, *args)
- ) if teamcity?
- end
- end
- end
- end
- desc 'Compiles all sources'
- task :compile do
- include TeamCity
- sources = FileList.new('**/*.rb').exclude(/restful\-authentication\/generators\//).to_a
- Messaging.create_tests_count(sources.size)
- sources.each do |filename|
- Messaging.create_test_started("Compiling #{filename}")
- result = system("ruby -c #{filename}")
- unless result
- Messaging.create_test_failed("Compiling #{filename}", "Error compiling #{filename}", '')
- else
- Messaging.create_test_finished("Compiling #{filename}", 0)
- end
- end
- end
Теперь создаём проект TeamCity с целью rake compile и вуаля, всё работает;)
______________________