Мені потрібна допомога у філософії та розробці безперервної інтеграції.
У нашій теперішній програмі CI використовується buildbot. Коли я почав його проектувати, я успадкував (ну, не суворо, оскільки я брав участь у його розробці роком раніше) замовника будівельника CI, який був розроблений, щоб одразу впродовж ночі запустити всю збірку. Через деякий час ми вирішили, що це недостатньо, і почали досліджувати різні рамки CI, врешті вибравши buildbot. Однією з моїх цілей переходу на buildbot (окрім того, щоб насолодитися всіма вигодами вибуху) було подолати деякі недоліки нашого нічного будівельника.
Намотуйте мене на мить, і дозвольте мені пояснити, що я отримав у спадок. База даних коду для моєї компанії - це майже 150 унікальних програм для Windows + c ++, кожен з яких має залежність від однієї чи декількох десятків внутрішніх бібліотек (і багатьох - від сторонніх бібліотек). Деякі з цих бібліотек взаємозалежні і мають залежні програми, які (хоча вони не мають нічого спільного) повинні бути побудовані з такою ж збіркою цієї бібліотеки. Половина цих додатків і бібліотек вважаються "застарілими" і нерепортажними, і вони повинні бути побудовані з декількома різними конфігураціями компілятора IBM (для яких я написав унікальні підкласи Compile
), а інша половина створена за допомогою візуальної студії.ShellCommand
s, оскільки немає підтримки для VSS).
Наш первісний нічний будівельник просто зняв джерело для всього і будував речі в певному порядку. Не було можливості створити лише одну програму, або вибрати версію, або згрупувати речі. Він запустив віртуальні машини для створення ряду додатків. Це було не дуже надійно, не було розповсюджено. Це було не дуже страшно. Я хотів, щоб я міг подолати всі ці обмеження в buildbot.
Я спочатку це робив - створити записи для кожної програми, яку ми хотіли створити (усі 150 в них), потім створити запущені планувальники, які могли б створювати різні програми як групи, а потім підписати ці групи під загальний планувальник нічних збірок. Вони могли працювати на спеціальних рабах (більше немає віртуальних машинних шикарних виробів), і якщо я хотів, я міг просто додати нових рабів. Тепер, якщо ми хочемо зробити повний збір за графіком, це одним клацанням миші, але ми також можемо створити лише одну програму, якщо так хочемо.
Однак у цього підходу є чотири слабкі сторони. Одне - це комплексне джерело залежностей нашого дерева. Щоб спростити підтримку конфігурації, усі будівельники створюються з великого словника. Залежності витягуються та будуються не надто міцно (а саме, відмикання певних речей у моєму словнику збірки-цілі). Друга полягає в тому, що кожна збірка має від 15 до 21 етапів збирання, які важко переглядати та дивитись у веб-інтерфейсі, а оскільки налічується близько 150 стовпців, для завантаження потрібно вічно (подумайте від 30 секунд до декількох хвилин). По-третє, у нас більше немає автоматичного розкриття цілей побудови (хоча, наскільки хтось із моїх колег з цього приводу сприймає, я в першу чергу не бачу, що це спричинило нас). Нарешті,
Тепер, переходячи до нової розробки, ми починаємо використовувати g ++ та підривну діяльність (не переносячи старе сховище, пам’ятайте - лише для нового матеріалу). Крім того, ми починаємо проводити більше тестування одиниць ("більше" може дати неправильну картину ... це більше як будь-яке ) та інтеграційне тестування (використовуючи python). Мені важко зрозуміти, як їх вписати в існуючу конфігурацію.
Отже, де я тут помилився по-філософськи? Як я можу найкраще рухатись вперед (за допомогою buildbot - це єдиний фрагмент головоломки, на який я маю ліцензію на роботу), щоб моя конфігурація була фактично підтриманою? Як вирішити деякі недоліки дизайну? Що реально працює з точки зору стратегій CI для великих (можливо, завищених) складних баз кодів?
Редагувати:
Я думав, що пояснив свою проблему, але очевидно, що я був недостатньо зрозумілий. Я не шукаю пропозицій щодо зміни платформ CI. Це не відбудеться, і відповіді, що підказують, що не будуть прийняті. Що я хочу знати - це те, як інші люди керують складними базами кодів за допомогою CI. У мене є десяток різних продуктів, і у мене залежність, розсіяна на вітрі, і всі вони різні. ЦЕ Я хочу знати, як боротися.