Nano Hash - криптовалюты, майнинг, программирование

Jenkins, параметризованные сборки и возможность выбора необходимых подпроектов и дочерних узлов на основе переменных

(Я видел здесь и в других источниках некоторые предложения, связанные с подключаемым модулем NodeLabel для решения подобных проблем, но еще не нашел надежного примера того, как на самом деле ИСПОЛЬЗОВАТЬ NodeLabel для этой цели.)) эм>

Прямо сейчас триггер gerrit запускает сборку на основе заданной ветки в репозитории git одного из моих проектов.

Это создает ОДНО родительское задание P, которое использует подключаемый модуль Parameterized Trigger для создания еще двух сборок проекта (обозначенных двумя метками) на двух подчиненных устройствах с двумя разными ОС (X1 и Y1).

Завтра у меня будет новая версия Y1 для сборки под названием Y2, а X1 устарела. Я могу определить допустимые цели для этой версии моего кода в репозитории git кода.

В этот момент у меня есть родитель (P) и три типа узлов (X1, Y1 Y2), с которыми нужно иметь дело. Из-за ветвления я также должен поддерживать возможность создания как устаревшего кода (для X1 и Y1), так и нового кода (только для Y2).

Я мог бы создать еще одно задание Y2 (которое идентично Y1, за исключением типа узла, который ограничивает сборку использованием статической метки), а затем во время выполнения каждого дочернего задания я мог решить, прерывать ли задание раньше (устаревшая цель ) или выполнить эту сборку. Однако при каждой сборке я теперь получаю четыре клона git, добавляющих избыточную нагрузку и трафик на сервер git: один для родительского и один для каждой цели, включая два, которые я мог определить как устаревшие во время первого шага «Выполнить оболочку». !

Это может показаться не таким уж большим, но когда мы доберемся до OS Y9, у нас может быть до десяти заданий, выполняемых для данной ветки, восемь из которых не нужны... это недопустимо. Хотя в конечном итоге более старые цели ОС будут удалены, в любой момент времени должно быть доступно несколько версий, даже если для данной сборки требуется только одна.

Сегодня первый шаг сборки моей сборки на Jenkins для любой цели использует «Выполнить оболочку» для сбора полезной информации для передачи дочерним заданиям.

Однако дочерние задания жестко запрограммированы в поле «Запуск/вызов сборок в других проектах -> Проекты для сборки» (вместе с другими важными настройками, такими как способ и время их блокировки!) Если бы вместо этого я мог поместить переменную там (или как-то сослаться на переменную, которую я установил программно), я мог бы просто установить эту переменную на шаге оболочки перед ней, и тогда она будет заполнена именно теми подпроектами, которые ей требуются! Подпроекты «знают», на каких узлах/группах узлов им разрешено выполняться.

Короче говоря, мой проект выполняет сценарий, этот сценарий устанавливает переменную, эта переменная определяет вызываемые подпроекты, как если бы я редактировал конфигурацию для этой сборки (например, MY_PROJ_TO_BUILD="X1 Y1" заполняет "Проекты для сборки " поле). Следующий шаг продолжается созданием этих подпроектов обычным способом. Это все, что мне нужно, и, конечно же, без потери текущей функциональности и без прямого взлома Дженкинса. (Поскольку они срабатывают от gerrit, запуск нескольких версий gerrit и/или Jenkins также не является приемлемым вариантом.)

NodeLabel уже упоминался, но я еще не видел примера его эффективного использования для такого рода проблем (примеры, которые я видел, крайне расплывчаты). Итак, если у вас есть пример, который отвечает всем требованиям, или указатель на него, я был бы рад его увидеть. Точно так же, если у вас есть другая идея/решение, я буду рад ее услышать. Я могу представить некоторые причины, по которым то, что я хотел, сработало (переменная подпрограмма в поле «проекты для создания») не работает и, возможно, не может, но, безусловно, создание множества ненужных клонов только для того, чтобы определить небольшое подмножество целей, необходимых для сборки данной ветки, также не является оптимальным.

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


Ответы:


1

Всего одна идея, я не уверен, что это сработает/поможет в вашей ситуации...

Запускайте дочерние задания через URL-адрес, а не через Jenkins. Сценарий проекта может получить доступ к URL-адресам для запуска дочерних заданий.

17.06.2013
  • Начать работу может быть легко, но я не знаю, как мне получить от них обратную связь. Решение этой проблемы начинается с повторной реализации Jenkins... 18.06.2013
  • Хороший вопрос, извините, я не подумал об этом. Это правда, ваш скрипт сборки должен будет каким-то образом сообщить об обратной связи Герриту. Это действительно не так уж сложно, как через SSH, так и через HTTP/REST, но я согласен, что это повторная реализация, по крайней мере, плагина Gerrit Trigger. Надеюсь, у кого-то еще есть идея. Удачи. 18.06.2013
  • Я, вероятно, собираюсь использовать свою дополнительную дочернюю сборку для каждого целевого плана и надеюсь, что скоро буду использовать что-то более гибкое и современное, чем Jenkins. Возможно, что-то написано на Python, а не на Java (это требует подходящего плагина для обработки этого, но написание плагинов для Jenkins никоим образом не является тривиальным). 18.06.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

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

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..


    © 2024 nano-hash.ru, Nano Hash - криптовалюты, майнинг, программирование