Мне было интересно, как люди справляются с дублированием между микро-сервисами (или приложениями) в конвейерах CI (особенно в Jenkinsfile).Это проблема, которая должна быть решена (и если да, то какие-либо предложения?).Мне нравится иметь более независимые сервисы, но я вижу, как их можно считать дублирующим кодом.
Вопросы:
- Это проблема, которая требуетбыть адресованным?
- Если так, как другие люди решают это?
- Если так, как далеко вы идете с этим / сколько вы делаете (гибкость против дублирования)?
Идеи:
Идея 1 - Библиотеки Jenkins:
Одним из методов может быть общий репозиторий библиотеки Jenkins., но создается впечатление, что это создаст сильную связь между службами (таким образом, будет сложнее обновлять и продвигаться вперед).
Я вижу два подхода к этому:
Aпара строк (импортировать библиотеку, затем запустить совместно используемую функцию, например, mvnSharedPipeline ()) - это было предложено, но для меня это слишком негибко.
На каждом этапе повторно используются общие функции (илив части этапа) например, этап «build» вызовет общую функцию mvnBuild или что-то - в основном: https://medium.com/@jackrwstevenson/the-reusable-microservice-pipeline-pattern-41742b2e640a
Idea 2 - файлы Docker:
Другой подход, который я могу придумать, - это использовать контейнеры Docker.
Я вижу два пути:
Контейнер инструментов, построенный поверх чего-то вроде контейнера OpenJdk # с добавленными пользовательскими сценариями, например "Name / OpenJdk8ToolsContainer"
Общий Docker-контейнер инструментов CI, но для вызова определенных задач (например, *)1053 * и docker run Name/CustomToolsContainer --rm ...pwd volume mount... lintJsonFiles.sh
)
Мои мысли:
Одна из моих проблем связана с тем, насколько проект зависит от среды CI, например:какую версию Java / PHP / etc они установили в самом CI.Я видел, как компании застряли на старых версиях языков из-за большого времени, необходимого для тестирования / обновления всего сразу, поэтому я сам склоняюсь к подходу Docker (2).Лично я предпочитаю запускать все, что я могу в контейнерах, особенно с помощью CI.К сожалению, я потерял много времени на отладку, почему что-то работает / не работает в CI (не в Jenkins), поэтому меня очень привлекает возможность репликации / повторного использования между CI и средой разработки.
ЯКроме того, учитывая, что конвейер CI никогда не совершенен и не завершен, всегда будут вещи, которые можно добавить / обновить, например, для улучшения качества или обновления версии.Таким образом, я вижу, что конвейеры CI расходятся, а затем нормализуются как обычное действие, но я хочу быть исправленным!