Gitlab CI на нескольких платформах одновременно - PullRequest
0 голосов
/ 27 августа 2018

У меня есть проект C ++, который скомпилирован и упакован для нескольких ОС (Linux, Windows, MacOS), а также для нескольких архитектур ЦП (i386, x86_64, arm, Aarch64). Для этого я использую Jenkins для получения исходного кодаи запустить скрипт сборки параллельно на каждой системе.Это простое рабочее решение, так как мой скрипт сборки имеет дело с системными различиями.

Теперь я изучаю Gitlab CI / CD, и в нем есть много вещей, которые мне кажутся привлекательными (возможность сохранять скрипт сборки какчасть репозитория, очень хорошо интегрированная с системой git-репо и тикетов, естественным использованием контейнеров Docker и т. д.), но я не могу найти способ запустить один и тот же конвейер в нескольких архитектурах / системах параллельно друг другу.

Итак, скажем, что мой сценарий сборки:

build:
  stage: build
  script: 
    - uname -m > arch.txt
  artifacts:
    paths:
      - arch.txt

Как я могу сказать Gitlab, что я хочу запускать это задание одновременно в нескольких бегунах / контейнерах / системах Docker?Вся документация, которую я до сих пор читал, касается запуска нескольких тестов на одной сборке , , интеграции нескольких проектов или развертывания в разных средах в зависимости от ветвей .Ничто из того, что я читал до сих пор, не пытается сделать много отдельных сборок, протестировать и упаковать их по отдельности и сообщить об их независимых результатах.Это возможно на Gitlab CI / CD?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Ознакомьтесь с последней версией GitLab 11.5 (ноябрь 2018 г.) с:

Параллельный атрибут для более быстрых конвейеров

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

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

См. документация и выпуск .

parallel позволяет настроить количество экземпляров задания для параллельного запуска.
Это значение должно быть больше или равно двум (2) и меньше или равно чем50.

Это создает N экземпляров одного и того же задания, которые выполняются параллельно.
Они именуются последовательно от job_name 1 / N до job_name N / N.

test:
  script: rspec
  parallel: 5
0 голосов
/ 27 августа 2018

GitLab использует «бегунов» для выполнения заданий CI.Бегунки устанавливаются везде, где вы хотите запустить задание CI, поэтому, если вы хотите работать на нескольких архитектурах, вам нужно будет установить бегунки в системах для каждой архитектуры.Документацию по установке бегунка можно найти здесь:

https://docs.gitlab.com/runner/install/index.html

Для заданий на основе Linux обычно используется Docker для выполнения заданий - это не дает архитектурной гибкости, но позволяетВы тестируете на разных вкусах и с разным программным обеспечением, используя контейнеризацию.Для других архитектур вам может потребоваться установить бегуны самостоятельно или использовать совместно используемые бегуны других пользователей.

При установке программного обеспечения бегунка необходимо выполнить несколько шагов:

  • youу вас есть возможность связать каждого участника с вашим проектом GitLab, что означает, что он будет отображаться в списке участников в Project> Settings> CI / CD.

  • у вас будет возможность назначить«метки» бегунам.Теги могут использоваться, чтобы помочь идентифицировать бегуна или группу бегунов по произвольному имени (например, вы можете добавить «Windows x86_64» в качестве тега или теги «Windows» и «x86_64»).Эти теги можно использовать в заданиях для выбора бегуна.

После установки бегунов вы можете редактировать файл .gitlab-ci.yml.

Файлы GI GitLab CIразбить на «этапы».Задания на каждом этапе могут выполняться параллельно.Имена этапов определены в верхней части файла.

stages:
  - build
  - deploy

Каждое задание CI можно прикрепить к этапу с помощью записи stage::

build job:
  stage: build
  script:
    - echo "I am a build stage job"

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

Для контроля того, где выполняется каждое задание, у вас есть два основных механизма:

  1. Теги - теги позволяют вамприкрепить работу к метке бегуна.Вы можете указать несколько тегов, используя запись tags:, которая формирует список AND (например, тег win AND x86_64).Когда это задание запускается, GitLab найдет бегуна со всеми необходимыми тегами и запустит его там.

  2. Изображение - при запуске в Docker / Kubernetes вы можете указать используемый образ докерадля бегуна.Чтобы использовать образ докера, сначала нужно указать бегун, который может запускать образы докера (например, бегун docker-in-docker или kubernetes), который, например, может быть помечен docker или kubernetes.Затем вы используете запись image: для указания образа докера.

Вот пример, показывающий и теги, и изображения:

build win x86_64:
  stage: build
  tags:
    - win
    - x86_64
  script:
    - echo "I am a build stage job for win x86_64"

build win 32:
  stage: build
  tags:
    - win
    - 32-bit
  script:
    - echo "I am a build stage job for win 32"

build debian:
  stage: build
  tags:
    - docker
  image: debian:stretch
  script:
    - echo "I am a build stage job for debian, running on docker using debian:stretch image"

В настоящее время поддержка не поддерживаетсядинамические задания или выполнение одного задания на нескольких участниках / архитектурах, так что это требует немного ручного труда.С другой стороны, это облегчает чтение файлов GitLab CI и позволяет легко увидеть, что будет выполняться во время выполнения CI.

...