2 года назад
Всем привет! Чтобы после моей предыдущей статьи о тестировании пайплайнов Jenkins не сложилось впечатления, что проблем нет и провалидированный IDEA, скомпилированный и оттестированный JUnit и Pipeline Unit тестами код сразу заработает в Jenkins - вот три больших ложки дегтя. Уточню, речь про scripted pipeline. 1) CPS. Детально что это за зверь написано тут https://www.jenkins.io/doc/book/pipeline/cps-method-mismatches/ Суть в том, что при выполнении код пайпа интерпретируется специальным образом, чтобы в любой момент на диске лежал актуальный слепок текущего состояния пайпа и можно было восстановить состояние после рестарта Jenkins. К слову, по моему опыту это не всегда работает, возможно пайпы кривые, возможно есть проблемы с плагинами. При этом далеко не весь вызываемый в runtime код можно так трасформировать, т.е. весь код делится на CPS и NonCPS. Не трансформируется Java standart library код, конструкторы и методы, помеченные @NonCPS. И есть правило - NonCPS код не может вызывать CPS код. На модульном тесте это проверить невозможно, функционал PipelineUnit для этого по факту не работает. 2) Groovy DSL. Код пишется не на Groovy, а на Groovy DSL, а это две большие разницы) ну может не совсем большие, но точно разницы. Т.е. почитав доки по Groovy ты видишь там разные крутые фичи, думаешь - о, а у него есть плюсы по сравнению в Java, пробуешь их использовать - и облом. Вот некоторые примеры: а) не работает with б) не работают traits в) не работает ссылка на метод через .& - используем {}. В принципе это даже более Groovish, но факт остается фактом г) переопределять методы enum в пайпе нельзя https://issues.jenkins.io/browse/JENKINS-48722 д) использовать @MapConstructor тоже нельзя https://issues.jenkins.io/browse/JENKINS-45901 е) без аннотации map constructor тоже не работает Как видно, на некоторые проблемы заведены баги, которые не решаются годами. Подозреваю, по двум причинам - разработчики фокусируются на declarative pipeline и трудоемкость исправления 3) Sandbox. В целях безопасности на большинстве нормально настроенных Jenkins включен режим Sandbox https://www.jenkins.io/doc/book/managing/script-approval/ Суть в том, что код запускается в песочнице, где разрешен вызов методов по whilelist. Есть возможность добавить в whitelist новые методы, но нужно апрувить каждый (!) метод. В зависимости от типа среды и компании это может быть трудоемко. Предположим, решили вы использовать новый Java DataTime API, написали 10 строк кода, вызвали пяток метод и все пять приходится апрувить. И узнаешь об этом также только когда выполнение кода дошло до нужного метода. По моему опыту именно на разруливание этих трех проблем тратится максимум времени при отладке пайпа. #devops #jenkins #unittest #debug
1581 читали · 4 года назад
Pipeline в Машинном обучении простыми словами
Пайплайн – 1. Последовательные стадии работы с данными, включающие как извлечение данных, скраббинг (очистку), Разведочный анализ данных (EDA), моделирование, интерпретацию и пересмотр. 2. Класс библиотеки Scikit-learn, последовательно применяющий к исходным данным настраиваемые преобразования. 3. Автоматизируемая последовательность обучения и оптимизации модели в PyTorch и других библиотеках. Пайплайн как последовательность: Извлечение Этот этап включает сбор данных из Интернета или баз данных и конвертация в определенные форматы...