В чем разница между Jenkins и другими CI, такими как GitLab CI, drone.io, идущим с дистрибутивом Git. В ходе некоторых исследований я мог только прийти к выводу, что версия сообщества GitLab не позволяет добавлять Дженкинса, а корпоративная версия GitLab позволяет. Есть ли другие существенные отличия?

Ответы (5)

Это мой опыт:

На моей работе мы управляем нашими репозиториями с помощью GitLab EE, и у нас работает сервер Jenkins (1.6).

В основе примерно то же самое. Они будут запускать некоторые скрипты на сервере / образе Docker.

TL; DR;

  • Jenkins проще в использовании / изучении, но он может стать адом для плагинов
  • У Jenkins есть графический интерфейс (это может быть предпочтительнее, если он должен быть доступен / обслуживаемым другими людьми)
  • Интеграция с GitLab меньше, чем с GitLab CI
  • Jenkins можно отделить от вашего репозитория

Большинство серверов CI довольно просты (concourse.ci), gitlab-ci, circle-ci, travis-ci, drone.io, gocd и что еще у вас есть). Они позволяют выполнять сценарии оболочки / летучей мыши из определения файла YAML. Jenkins гораздо более гибок и имеет пользовательский интерфейс. Это может быть преимуществом или недостатком, в зависимости от ваших потребностей.

Jenkins легко настраивается из-за всех доступных плагинов. Обратной стороной этого является то, что ваш CI-сервер может превратиться в спагетти плагинов.

На мой взгляд, создание цепочек и оркестровка заданий в Jenkins намного проще (из-за пользовательского интерфейса), чем через YAML (вызов команд curl). Кроме того, Jenkins поддерживает плагины, которые будут устанавливать определенные двоичные файлы, когда они недоступны на вашем сервере (не знаю об этом для других).

В настоящее время (Jenkins 2 также поддерживает более "правильные ci" с Jenkinsfile и pipline плагином, который по умолчанию, начиная с Jenkins 2), но использовал быть менее привязанным к репозиторию, чем GitLab CI.

Использование файлов YAML для определения конвейера сборки (и, в конце концов, запуска чистой оболочки / летучей мыши) намного чище.

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

В последнее время все больше и больше работаю с GitLab CI. В GitLab они действительно отлично справляются с работой, делая весь процесс увлекательным. Я понимаю, что люди используют Jenkins, но когда у вас запущен и доступен GitLab, начать работу с GitLab CI очень легко. Не будет ничего, что могло бы интегрироваться так же легко, как GitLab CI, даже если они приложили немало усилий для сторонних интеграций.

  • Их документация должна помочь вам начать работу в кратчайшие сроки.
  • Порог для начала работы очень низкий.
  • Простое обслуживание (без плагинов).
  • Масштабирование бегунов просто.
  • CI полностью является частью вашего репозитория.
  • Задания / просмотры Jenkins могут быть беспорядочными.

Некоторые льготы на момент написания:

  • В версии для сообщества поддерживается только один файл. Множественные файлы в Enterprise Edition.

Во-первых, на сегодняшний день GitLab Community Edition может полностью взаимодействовать с Jenkins. Без вопросов.

Далее я дам несколько отзывов об успешном опыте объединения Jenkins и GitLab CI. Я также обсудю, следует ли вам использовать оба или только один из них и по какой причине.

Надеюсь, это даст вам качественную информацию о ваших собственных проектах.

Сильные стороны GitLab CI и Jenkins

GitLab CI

GitLab CI естественным образом интегрирован в GitLab SCM. Вы можете создавать конвейеры, используя файлы gitlab-ci.yml, и управлять ими через графический интерфейс.

Эти конвейеры в виде кода, очевидно, могут быть сохранены в базе кода, применяя практику «все как код» (доступ, управление версиями, воспроизводимость, возможность повторного использования и т. Д.).

GitLab CI - отличный инструмент для визуального управления:

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

Дженкинс

Jenkins - отличный инструмент для сборки. Его сила в его многочисленных плагинах. В частности, мне очень повезло с использованием подключаемых модулей интерфейса между Jenkins и другими инструментами CI или CD. Это всегда лучший вариант, чем переработка (возможно, неудачная) диалогового интерфейса между двумя компонентами.

Конвейер в виде кода также доступен с использованием groovyскриптов.

Совместное использование GitLab CI и Jenkins

Поначалу это может показаться немного избыточным, но сочетание GitLab CI и Jenkins - это довольно мощный инструмент.

  • GitLab CI оркестрирует (цепочки, запускает, отслеживает ...) конвейеры, и можно получить выгоду от его графического интерфейса, интегрированного в GitLab
  • Jenkins выполняет задание и упрощает диалог со сторонними инструментами.

Еще одним преимуществом этой конструкции является слабая связь между инструментами:

  • мы могли бы заменить любой из компонентов фабрики сборки без необходимости переделывать весь процесс CI / CD
  • мы могли бы иметь разнородную среду сборки, объединяющую (возможно, несколько) Jenkins, TeamCity, вы называете это, и при этом иметь один инструмент мониторинга.

Компромисс

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

По этой причине я не рекомендую такую ​​настройку, кроме случаев

  • вам приходится иметь дело со многими сторонними инструментами. Вот тогда-то и пригодится Jenkins с его многочисленными плагинами.
  • вам приходится иметь дело со сложными приложениями с разнородными технологиями, каждое из которых имеет свою среду сборки, и при этом вам все равно необходимо иметь единый пользовательский интерфейс управления жизненным циклом приложения.

Если вы не попали ни в одну из этих ситуаций, вам, вероятно, лучше выбрать только одну из двух, но не обе.

Если бы мне пришлось выбрать один

И у GitLab CI, и у Jenkins есть плюсы и минусы. Оба являются мощными инструментами. Так какой же выбрать?

Ответ 1

Выберите ту, которую ваша команда (или кто-то из ее близких) уже имеет определенный уровень экспертиза в.

Ответ 2

Если вы все новичок в технологиях CI, просто выберите одного и приступайте.

  • Если вы используете GitLab и разбираетесь во всем в качестве кода, выбор GitLab CI имеет смысл.
  • Если вам нужно вести диалог со многими другими инструментами CI / CD или этот графический интерфейс абсолютно необходим для создания ваших рабочих мест, выберите Jenkins.

Те из вас, кто использует GitLab и не уверен, что они будут продолжать это делать, все равно должны помнить, что выбор GitLab CI будет означать удаление всех ваших конвейеров CI / CD.

Последнее слово: баланс склоняется на немного в пользу Jenkins из-за множества плагинов, но есть вероятность, что GitLab CI быстро заполнит пробел.

если ваши задачи сборки / публикации / развертывания и тестирования не очень сложны, то использование gitlab ci имеет естественные преимущества.

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

Например, вы хотите провести модульное тестирование для любой проверки в ветке разработки, тогда как вам может потребоваться провести полноценное функциональное тестирование в ветке QA и ограниченный тип тестов только для получения в производственной среде, этого можно легко достичь с помощью gitlab ci .

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

кроме того, gitlab ci автоматически проверяет вас, и вам не нужно отдельно управлять мастером jenkins

Я согласен с большинством замечаний Рика, но мое мнение о том, что проще: противоположное: GitLab оказался отличным инструментом для работы.

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

• 100001 возникновение неотзывчивого скрипта и легковесность редактирования .gitlab-ci.yml).

Время, затрачиваемое на настройку / масштабирование ведомых устройств, значительно меньше благодаря исполняемым файлам; плюс тот факт, что в GitLab.com вы получаете вполне приличных и бесплатных общих раннеров.

Дженкинс чувствует себя подробнее после нескольких недель опытного пользователя GitLab CI, например дублирование заданий для каждой ветки, установка плагинов для выполнения простых вещей, таких как загрузка SCP. Единственный случай использования, с которым я столкнулся, когда я его пропустил на сегодняшний день, - это когда задействовано более одного репозитория; в этом еще нужно хорошо разобраться.

Кстати, в настоящее время я пишу серию статей о GitLab CI, чтобы продемонстрировать, как не так уж сложно настроить с его помощью инфраструктуру CI вашего репозитория. Опубликованная на прошлой неделе первая часть представляет основы, плюсы и минусы и различия с другими инструментами: Быстрая и естественная непрерывная интеграция с GitLab CI

Я хотел бы добавить некоторые выводы из моих недавних экспериментов с GitLab CI. Функции, которые были в версиях 11.6 и 11.7, просто потрясающие!

В частности, мне нравятся только условия, которые в основном позволяют создавать отдельные конвейеры для merge_request или push (полный список здесь)

Также мне очень нравится отсутствие плагинов. Когда мне нужны более сложные функции, я просто пишу собственный образ Docker, который обрабатывает необходимые функции (это та же концепция, что и в drone.io).

Если вас интересует DRY, в наши дни это абсолютно возможно! Вы можете написать свои "шаблоны"

.myTemplate:
  image: node:10.14.2
  script:
    - npm install
    - npm run test

Поместите их в какой-нибудь публичный репозиторий, включите в основной конвейер:

include:
  - remote: https://....

И используйте их, чтобы продлить какую-то работу:

test:
  extends: .myTemplate
  only:
    refs: ["master"]
    variables:
      - $CI_PIPELINE_SOURCE == "push"

Я так люблю GitLab CI! Да, он (пока) не может рисовать красивые графики с охватом и т. Д., Но в целом это действительно отличный инструмент!

Edit (2019-02-23): вот мой пост о вещах, которые мне нравятся в GitLab CI. Он был написан в «эру» 11.7, поэтому, когда вы читаете этот ответ, GitLab CI, вероятно, имеет гораздо больше возможностей.

Изменить (2019-07-10): Gitlab CI теперь поддерживает несколько расширений, например.

extends:
 - .pieceA
 - .pieceB

Обратитесь к официальной документации, чтобы получить дополнительную информацию о множественных расширениях

2022 WebDevInsider