Это небольшая сводка информации к докладу на 404fest про то, как мы используем Jenkins в Parallels для сборки Parallels Desktop for Mac.
Презентацию с доклада можно взять здесь.
Удобная ссылка на документ, который вы сейчас читаете: bit.ly/ParallelsJenkins.
Видео будет выложено позже, как только его смонтируют.
Если у вас есть вопросы, их можно задать мне в Twitter: @racktear или по почте: [email protected].
При использовании Jenkins, всегда загружайте LTS версию. Обычные сборки, доступные на сайте, не очень стабильны.
У Parallels есть собственный код для разворачивания Jenkins Job-ов, который очень специфичен для наших продуктов. Но вот то, что вы можете использовать из доступного OpenSource кода:
- jenkins-autojobs -- Скрипт на Python, автоматически разворачивающий Job-ы из YAML конфига
- jenkins-build-per-branch -- Разворачивает Job-ы на основе существующих
- jenkins-job-builder -- Шаблонная система и способ написания Job-ов целиком в YAML
"Из коробки" Jenkins не поддерживает параллельную и групповую сборку. Но с этим легко справиться, используя плагины:
- BuildFlow Plugin -- то, что используем мы. Простая и надежная схема. Скриптуется на Groovy.
- MultiJob Plugin -- еще один вариант, похожий на BuildFlow. Но не такой гибкий, за счет отсутствия возможности его заскриптовать.
- Workflow Plugin -- пока в разработке. Этот плагин, скорее всего, будет в будущем одним из лучших.
Без такой схемы вам будет тяжело разворачивать Job-ы автоматически. Наш вариант:
<project>-<branch>-<component>
- project -- название проекта
- branch -- название бранча или версия продукта
- component -- имя компонента
Базовая система хранения файлов Jenkins, не подходит для больших проектов. Она медленная и негибкая. Вот что вы можете использовать:
- Artifactory -- наш выбор. Работает практически для любых проектов и языков программирования.
- Nexus -- не такой гибкий. Больше подходит для Java проектов.
Просто собрать проект -- не достаточно. Нужно еще иметь возможность пометить некоторые сборки как "специальные" или "релизные". Или даже отправить соответствующие файлы на внешнее хранилище. Для этого есть:
- artifactory-python -- написанная нами Python библиотека для работы с Artifactory. Есть на GitHub и PyPi.
- Promoted Builds Plugin -- плагин для Jenkins, позволяющий сделать что-то со сборкой уже после того, как она завершилась. Например, пометить как валидную для выпуска в production.
Помогают держать конфигурацию софта на ваших серверах одинаковой. Это тяжелая артиллерия, но если вдруг у вас начнутся проблемы с "разъезжанием" конфигураций, то вот возможное лечение:
- Chef -- наш выбор. Система сложная, но очень мощная. Написана на Ruby.
- Puppet -- то же что Chef, только с немного отличающейся концепцией. Написана на Ruby.
- Salt Stack -- средней сложности. Написана на Python.
- Ansible -- довольно простая система. Написана на Python. Подходит для начинающих.
- Orchestrating Your Delivery Pipelines with Jenkins -- статья от авторов Jenkins о том, как его правильно использовать в сложных проектах
- Unlimited Jenkins Slaves in 5 Quick Steps -- как запускать сборку компонентов в "резиновом" облаке