Когда вы используете CodeShip в качестве сервера CI, вы можете значительно увеличить скорость своих CI-сборок с помощью Parallel Test Pipelines. Конвейеры позволяют запускать несколько команд одновременно, например, вы можете разделить набор тестов на несколько конвейеров и выполнить сборку CI намного быстрее.
1. Как запускать параллельные команды на CodeShip
Настройка через интерфейс CodeShip
Один из способов — определить команды через интерфейс CodeShip. После включения параллельных конвейеров тестирования каждый проект может иметь несколько конвейеров тестирования, которые будут выполняться параллельно.
Чтобы выполнить сборку CI как можно быстрее, нам необходимо убедиться, что параллельные команды будут запускать подмножество набора тестов таким образом, чтобы все команды выполнялись одновременно, чтобы избежать узких мест медленного конвейера. Чтобы разделить набор тестов, мы будем использовать Knapsack Pro с режимом очереди, который выполняет динамическое разделение набора тестов по конвейерам для тестов Ruby и JavaScript, чтобы поддерживать оптимальное выполнение наших тестов в параллельных конвейерах (также известных как узлы CI).
Пример набора тестов в RSpec для проекта Ruby on Rails
Настройка тестовых конвейеров (используется 1/2)
# first CI node running in parallel
# RSpec tests in Knapsack Pro Queue Mode (dynamic test suite split)
KNAPSACK_PRO_CI_NODE_TOTAL=2 KNAPSACK_PRO_CI_NODE_INDEX=0 bundle exec rake knapsack_pro:queue:rspec
Настройка тестовых конвейеров (используется 2/2)
# second CI node running in parallel
# RSpec tests in Knapsack Pro Queue Mode (dynamic test suite split)
KNAPSACK_PRO_CI_NODE_TOTAL=2 KNAPSACK_PRO_CI_NODE_INDEX=1 bundle exec rake knapsack_pro:queue:rspec
Пример разделения набора тестов для запуска тестов Cypress в JavaScript
Настройка тестовых конвейеров (используется 1/2)
# first CI node running in parallel
KNAPSACK_PRO_CI_NODE_TOTAL=2 KNAPSACK_PRO_CI_NODE_INDEX=0 $(npm bin)/knapsack-pro-cypress
Настройка тестовых конвейеров (используется 2/2)
# second CI node running in parallel
KNAPSACK_PRO_CI_NODE_TOTAL=2 KNAPSACK_PRO_CI_NODE_INDEX=1 $(npm bin)/knapsack-pro-cypress
Подробнее о Cypress test runner для E2E-тестов в JavaScript вы можете узнать в этой статье.
2. Настройка через codeship-services.yml
Если вы используете CodeShip Pro, то группа параллельных шагов определяется с помощью заголовка type: parallel
, а затем вложения всех шагов, которые вы хотите распараллелить, как показано в этом примере:
- type: parallel
steps:
- service: app
command: KNAPSACK_PRO_CI_NODE_TOTAL=2 KNAPSACK_PRO_CI_NODE_INDEX=0 bundle exec rake knapsack_pro:queue:rspec
- service: app
command: KNAPSACK_PRO_CI_NODE_TOTAL=2 KNAPSACK_PRO_CI_NODE_INDEX=1 bundle exec rake knapsack_pro:queue:rspec
Еще примеры настройки Параллелизм CodeShip Pro
3. Как работает разделение набора динамических тестов
Если вы хотите лучше понять, как работает динамическое разделение набора тестов и какие проблемы оно может решить, посмотрите видео:
Резюме
Параллельное выполнение тестов — это быстрый способ сократить время сборки CI. Чтобы сделать его более эффективным, мы можем оптимально разделить набор тестов между узлами CI с помощью Knapsack Pro, чтобы поддерживать автоматическую балансировку узлов CI и запускать сборку CI как можно быстрее.
Первоначально опубликовано на docs.knapsackpro.com.