В нашей компании по тестированию ПО на аутсорсе мы постоянно сталкиваемся с тем, что формат сотрудничества диктует инфраструктура заказчика. На одном проекте нас ждет построенная по всем канонам CI/CD, а на другом полное отсутствие VCS. В таких условиях легко потерять контроль над качеством нашей работы.

В этой статье я расскажу, как мы выстроили внутренний контур качества, используя собственную инфраструктурную прослойку, и почему от этого решения в итоге хорошо и нам, и заказчику.

Когда мы заходим на проект, то почти всегда встраиваемся в существующую экосистему.

Однако, при таком варианте мы теряем возможность управлять результатом нашей работы.

Работая исключительно на стороне клиента, мы не можем внедрить обязательное внутреннее ревью кода, настроить свои стандарты CI/CD-пайплайнов или, например, использовать привычные нам инструменты отчетности.

Бывает ситуации и сложнее. Например, у клиента есть CI/CD, но из-за требований безопасности им нельзя подключать внешние раннеры. Бывает случаи, когда у клиента нет своего CI/CD. Поднять его у себя они не могут (нет на это ресурсов, людей или того и другого), а использовать публичные или даже приватные облака запрещает какое-нибудь внутреннее соглашение.

Чтобы избежать таких осложнений в нашей работе, нам была необходима собственная технологическая база, которая позволила бы выполнять задачи независимо от состояния инфраструктуры на стороне заказчика.

Наш стек

Чтобы обеспечить стабильность, мы развернули внутреннюю связку: Self-hosted GitLab + GitLab CI + GitLab Pages.

Почему именно Self-hosted? Это был единственный способ подружить наши стандарты с требованиями безопасности клиентов. Мы не зависим от ограничений публичных облаков и можем гарантировать соблюдение NDA, храня все на своих мощностях.

Наша система спроектирована как гибкая прослойка, которая синхронизируется с окружением клиента одним из двух способов:

CI на нашей стороне

Актуально, когда у клиента пустой репозиторий и нет автоматизации. Мы запускаем пайплайны у себя, прогоняем тесты, а в систему управления версиями клиента просто мерджим уже проверенный, валидный код. Все запуски, логи и вычисления происходит в нашем контуре, а клиент получает чистый результат уже в свой репозиторий.

Синхронизация через feature-ветки

Если у заказчика настроен свой CI/CD, мы используем гибридную схему. Работа идет в нашем GitLab, где настроены дополнительные шаги проверки (как автоматические линтеры, так и ручное ревью нашими техлидами). Пайплайны во внутреннем контуре позволяют выполнять подготовительные действия и постусловия, которые недоступны или запрещены в системе заказчика. И только после того, как код прошел внутренний фильтр и получил апрув эксперта, изменения автоматически отправляются в репозиторий клиента.

Артефакты и отчетность

Чтобы продемонстрировать заказчику результаты нашей работы мы прибегаем к одному из двух вариантов.

Если клиент готов пустить нас в свой контур — мы публикуем отчеты там, а если доступов нет или системы автоматизации отсутствуют — мы задействуем GitLab Pages.

Этот инструмент позволяет нам мгновенно развертывать статические страницы с отчетами. Для клиента это выглядит максимально просто: ссылка в браузере, перейдя по которой можно увидеть состояние проекта здесь и сейчас. Никакой необходимости погружаться в дебри нашей внутренней инфраструктуры. Естественно, ссылка доступна только для авторизированных в нашей системе пользователей, а отчеты видны только для авторизированных лиц со стороны клиента.

Мы используем этот же подход и для исследовательского тестирования. Нужно быстро показать итоги короткой итерации? Система формирует отчет либо в виде архива с артефактами, либо в виде страницы на GitLab Pages.

По сути, мы создали среду, где качество работы стало технически неизбежным, независимо от того, как устроены процессы на стороне заказчика.

Что это дает в итоге?

Мы запускаем конвейер в первый день проекта. Мы уверены в коде, который отдаем, потому что он прошел через наши внутренние пайплайны и ревью. Клиент не тратит ресурсы на свою инфраструктуру под нужды QA — мы приносим все необходимое с собой.

В конечном счете выигрывают все: заказчик получает предсказуемый результат быстрее, а мы сохраняем лицо и профессиональные стандарты в любых условиях.

Комментарии (0)