Я хочу настроить среду непрерывной интеграции с тремя операционными системами (MacOSX, Windows и Linux). Мне нужно собрать пять разных сборок: win32bit, win64bit, lin32bit, lin64bit и mac. Для каждой сборки мне нужно сделать следующие шаги:
-compile
-put some files in the binary folder
-make a 7z-archive of the binary folder
-upload the 7z-archive to a server
Конечно, есть зависимости. Например, бесполезно создавать и загружать 7z-архив, если компиляция не удалась.
Моей первой попыткой было построить небольшую иерархическую систему планировщиков и сборщиков, но я не знаю, как обрабатывать зависимости в каждой сборке:
Мой план (Start_scheduler прослушивает коммиты svn):
\Start_scheduler, kicks off win_builder, lin_builder, and mac_builder
\win_builder, compiles and uploads win32bit and win64bit
-compile 32bit
-put some files in the binary folder
-make a 7z-archive of the binary folder
-trigger upload_scheduler to upload IF 32bit compile was succesful
-compile 64bit
-put some files in the binary folder
-make a 7z-archive of the binary folder
-trigger upload_scheduler to upload IF 64bit compile was succesful
\lin_builder, compiles and uploads lin32bit and lin64bit
-compile 32bit
-put some files in the binary folder
-make a 7z-archive of the binary folder
-trigger upload_scheduler to upload IF 32bit compile was succesful
-compile 64bit
-put some files in the binary folder
-make a 7z-archive of the binary folder
-trigger upload_scheduler to upload IF 64bit compile was succesful
\mac_builder, compiles and uploads mac
-compile
-put some files in the binary folder
-make a 7z-archive of the binary folder
-triggerupload_scheduler to upload IF compile was succesful
\upload_scheduler
-upload 7z-archive to central server
-send notification about new archive
В основном у меня две проблемы. Во-первых, как я могу определить IF-зависимость между компиляцией и загрузкой, но в то же время сделать 64-битную компиляцию независимой от 32-битной: система сборки должна пытаться компилировать 64-битную, даже если 32-битная ошибка.
И во-вторых, можно ли параметризовать upload_scheduler, чтобы я мог использовать его для каждой сборки? Было бы утомительно, если бы мне нужно было поддерживать отдельный upload_scheduler для каждой сборки.