Какой самый простой способ ограничить этапы конвейера определенным c общим ресурсом? - PullRequest
0 голосов
/ 15 февраля 2020

У нас есть существующая установка Jenkins, которая тестирует встроенное ПО, работающее на встроенном пироге. Многоступенчатый конвейер выглядит примерно так: Оформление заказа -> Сборка -> Загрузка -> Дымовые испытания -> Единица Тесты . Это работает отлично, за исключением того, что для запуска трубопровода требуется 9 часов. Чтобы ускорить процесс, а также протестировать различные варианты целей, мы добавили в систему еще 3 цели (UUT # 1, # 2 и т. Д.).

Мой вопрос заключается в том, какой самый простой способ разрешить параллелизацию при одновременном ограничении наборов UUT с указанными c свойствами. Например, наши модульные тесты содержат около 10 различных наборов (suite1 suite2 и т. Д.), И я хотел бы распределить их среди 4 проверяемых объектов (таким образом, имея по 4 набора одновременно). ) но ограничить выполнение следующим образом:

  • Suite1 может работать только на проверяемом оборудовании с «USB»
  • Suite2 может работать только на проверяемом оборудовании с «ЖК-дисплеем»
  • Suite3 может работать где угодно

.. и т. Д., Тогда мои UUT могут иметь такие свойства, как:

  • UUT # 1 «USB LCD-дисплей»
  • UUT # 2 'Ethernet'
  • UUT # 3 'RS-232 USB'

Et c.

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

Давний пользователь Jenkins, но я впервые пытался сделать что-то столь сложное, и конвейеры для меня - новая концепция.

1 Ответ

1 голос
/ 25 февраля 2020

Простой способ - использовать плагин Lockable Resources .

. Это можно использовать как шаг, а также как опцию этапа (без документов). Последнее пригодится, если у вас есть вложенные этапы, все из которых зависят от блокируемого ресурса.

Опция этапа в декларативном конвейере

pipeline {
    agent any

    stages {
        stage('Test') {
            options {
                // Lock a single resource from all resources labeled 'mylabel'
                lock( label: 'mylabel', 
                      quantity: 1,
                      variable: 'MyResourceName' )
            }
            steps { // or 'parallel' or 'stages'
                echo "Locked resource $MyResourceName"
                sleep 10
                echo "Resource will be unlocked after this stage"
            }
        }
    }
}

Шаг в скриптовом конвейере

node {
    stage('Test') {
        lock( label: 'mylabel', 
              quantity: 1,
              variable: 'MyResourceName' ) {

            echo "Locked resource $MyResourceName"
            sleep 10
            echo "Resource will be unlocked after this stage"
        }
    }
}

Предостережения

  • Если lock используется в качестве шага в декларативном конвейере, вы можете получить ошибка:

    Отсутствует обязательный параметр: "ресурс"

    Кажется, это небольшая ошибка при проверке аргумента. Согласно документации, вам нужно только указать параметр resource или label. Просто введите null в качестве значения этого параметра.

  • Если параметр quantity не указан, все ресурсы, соответствующие данной метке, будут заблокированы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...