Меню Рубрики

Установка плагинов для jenkins

Как установить Jenkins и настроить автоматическую сборку maven-проекта на Ubuntu 16.04

Jenkins является одним из популярных инструментов, позволяющий реализовывать подход непрерывной интеграции (Continuous Integration, CI) и непрерывной поставки (Continuous Delivery, CD) программного обеспечения.

CI существенно облегчает интеграцию разрозненных копии проекта с основной ветвью разработки, позволяет настраивать автоматическую сборку проекта и запускать тесты.

CD обеспечивает в автоматическом режиме поставку и развертывание результатов сборки на целевых серверах.

В этой статье мы рассмотрим, как установить Jenkins, и на примере веб-приложения на Java покажем, как автоматизировать процесс сборки и поставки его на веб-сервер Jetty.

Исходный код веб-приложения лежит в git-репозитории, а в качестве инструмента сборки используется Maven.

Требования

  • Сервер Ubuntu 16.04 x64 (мы использовали следующую конфигурацию: Ubuntu 16.04 64 bit RAM 512Mb и SSD 20 Гб);
  • Пользователь с root-правами.

Шаг 1. Установка Jenkins

Заходим под root-пользователем и выполняем в командной строке Ubuntu следующие команды:

После установки система автоматически запустит сервис Jenkins. Проверяем его статус с помощью команды:

Как видим, сервис запущен и находиться в активном статусе. Если сервис неактивен, то необходимо проверить, свободен ли порт 8080 и хватает оперативной памяти (Jenkins требует от 256MB до 1GB).

Шаг 2. Установка Git

Проверяем установленную версию:

Шаг 3. Установка Maven

Для работы Maven нам понадобится установить JDK:

По завершении установки выполняем проверку:

Проверяем успешность установки:

Здесь необходимо запомнить значение Maven home. В нашем случае это /usr/share/maven. Этот путь будет нужен в дальнейшем для настройки Jenkins.

Шаг 4. Настройка Jenkins

Все необходимые установки сделаны, и можно перейти к настройке Jenkins.

Управление Jenkins осуществляется через веб-интерфейс, по умолчанию доступный на порту 8080:

Открываем в браузере страницу http://[IP-адрес сервера]:8080:

Если интерфейс не появился, то необходимо открыть порт 8080 и проверить статус работы сервиса Jenkins.

Для продолжения настройки нам потребуется ввести пароль администратора, который хранится в файл /var/lib/jenkins/secrets/initialAdminPassword.

Возвращаемся в командную строку Ubuntu и открываем его с помощью встроенного редактора vi:

Копируем пароль и выходим из файла с помощью команду

Скопированный пароль вставляем в поле ввода и нажимаем «Продолжить».

На следующем шаге нам необходимо выбрать режим установки плагинов, которые будут установленные вместе с Jenkins. Выбираем Install suggested plugins:

После установки всех плагинов создаём профиль администратора:

Имя пользователя и пароль запоминаем для дальнейшей работы.

Нажимаем «Продолжить». На экране появится сообщение, свидетельствующее о готовности Jenkins к работе:

На этом основная настройка закончена. Нажимаем на кнопку “Start using Jenkins” и переходим в рабочую панель Jenkins.

Шаг 5. Настройка Maven в Jenkins

Jenkins не всегда распознает установленный в системе Maven, поэтому его нужно указать вручную.

Выбираем “Настроить Jenkins” в левом меню:

Переходим к “Global Tool Configuration”

В появившемся окне ищем раздел Maven и нажимаем на кнопку «Добавить». Открываются поля для ввода:

Вводим произвольное имя и путь до установочной папки Maven home, полученный нами на 3-ем шаге во время проверки версии. Снимаем флажок Install automatically и сохраняем.

Чтобы изменения вступили в силу, перезапускаем Jenkins:

Шаг 6. Создание автоматической сборки

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

В появившемся окне нажимаем на ссылку “Создайте новую задачу”

Вводим название проекта, выбираем “Создать задачу со свободной конфигурацией” и нажимаем “OК” внизу страницы.

На вкладке General находим раздел “Управление исходным кодом” и выбираем Git. Система предлагает ввести нам URL Git репозитория. Вводим его:

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

Добавляем логин и пароль в подразделе Credentials. Выбираем из выпадающего списка “Jenkins”:

В появившемся окне вводим Username и Password:

Добавляем и выбираем из выпадающего списка созданные credentials:

Читайте также:  Установка арматуры сливного бачка sanita

Ошибка доступа больше не выводится:

После того, как мы указали репозиторий из которого необходимо получать исходный код, переходим к настройки сборки.

Находим раздел “Сборка”, нажимаем “Добавить шаг сборки” и выбираем из выпадающего списка “Вызвать цели Maven верхнего уровня”

Вставляем в поле “Цели” команды для сборки maven-проекта.

Результат сборки будет сохраняться в папке /var/lib/jenkins/workspace/Lolipop/target/, где Lolipop — название нашего проекта. В данном примере результатом сборки будет готовый к развертыванию war-файл.

В качестве примера рассмотрим, каким образом автоматизировать процесс развертывания war-файла на веб-сервер Jetty, который работает на этой же машине.

О Jetty и его установке можно более подробно прочитать здесь.

Добавим еще один шаг сборки, который будет копировать war файл в папку webapps Jetty и перезапускать его. На этот раз выбираем из выпадающего списка “Выполнить команду shell”.

На этом настройка сборки закончена, нажимаем «Сохранить» и переходим к запуску.

Шаг 7. Запуск сборки

Для запуска сборки в меню выбираем “Собрать сейчас”. После этого в левом нижнем углу в разделе “История сборок” появится индикатор процесса сборки с датой и временем запуска:

Во время сборки Jetty будет выполнять последовательно следующие задачи:

  1. Загрузка из Git репозитория последней версии исходного кода проекта
  2. Запуск сборки загруженного Maven проекта
  3. Размещение результатов сборки в папке workspace
  4. Копирование war файла в папку webapps веб-сервера Jetty
  5. Перезапуск Jetty

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

Нажав на номер сборки и перейдя в левом меню в раздел Console Output, можно отследить отладочный вывод сборки:

Автоматическая сборка и доставка на веб-сервер настроена. Теперь мы можем запускать её в нужный момент с помощью кнопки “Собрать сейчас”. Если у вас несколько серверов выкладки с разными конфигурациями, вы можете настроить сборку под каждую выкладку.

Шаг 8. Как изменить порт подключения Jenkins

В ряде случаев порт 8080 занят или его необходимо освободить под другие сервисы. В рассмотренном примере Jetty по умолчанию запускается на порту 8080.

Чтобы Jenkins подключался к другому порту, в файле etc/default/jenkins нужно изменить значение переменной HTTP_PORT на желаемый порт и перезапустить сервис Jenkins.

Заключение

Jenkins поддерживает технологии для работы с разными системами контроля версий, включая Git, CVS, Subversion, Clearcase и Mercurial, может собирать проекты на Ant, Maven и Gradle, а также исполнять команды Windows, shell-скрипты и отправлять уведомления о состоянии сборки в автоматическом режиме.

Благодаря такому разнообразному инструментарию Jenkins можно применять на проектах с разными технологиями и любой сложности.

Jenkins также поддерживает триггеры сборки, которые могут вызывать сборку по определённому расписанию или событию.

Все эти преимущества делают Jenkins незаменимым инструментом при построении процесса разработки.

источник

Как за день поднять CI для iOS-разработчиков

Статья была впервые опубликована здесь и здесь.

Прогрессивная часть девелоперской среды практикует методику непрерывной интеграции ( CI ), и iOS-отдел компании Лайв Тайпинг решил к ней примкнуть, развернув сервер для сборок на платформе Jenkins. С тех пор началась совсем другая жизнь.

Что мы получили в итоге:

  1. Сервер начинает сборку:
    1. по веб-хуку в случае push’а в master-ветку;
    2. по команде в чате slack с указанием нужной ветки и доп. параметров.
  2. Выполняет Unit и UI -тесты.
  3. Получает следующие метрики:
    1. покрытие кода тестами;
    2. количество строк кода;
    3. дублирование кода;
    4. цикломатическая сложность кода.
  4. Архивирует проект в ipa, далее отправляет его на сервер сборок (собственной разработки) и отправляет в slack ссылку на сборку.

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

Читайте также:  Установка лопаток в твд

Для начала ознакомьтесь со следующими оговорками и поймите, сопоставим ли наш гайд с вашими задачами:

  1. сервер разворачивался под нужды iOS-разработки;
  2. установка большинства вспомогательных программ через homebrew, включая и сам Jenkins (быстрые обновления и удобство использования);
  3. использование xcodebuilder для всех задач сборки-тестирования (отказались от использования xctool из-за невозможности запуска UI -тестов);
  4. в качестве репозитория у нас используется GitLab;
  5. для хранения сборок мы используем сервер собственной разработки. Для каждой сборки генерируется уникальный URL , и далее достаточно открыть ссылку с мобильного устройства в браузере и нажать «Установить» — благодаря аккаунту Enterprise любой может установить приложение на телефон. Из-за специфичности действий, связанных с отправкой файлов на наш сервер, этот этап в статье не описывается;
  6. все наши проекты используют систему управления зависимостями СocoaPods.

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

Что необходимо:

  1. Mac c установленным OS X и Xcode (В нашем случае MacBook Pro 2011 года с OS X 10.11.4);
  2. несколько часов свободного времени.

Создание пользователя Jenkins и его настройка

Пользователя можно создать как через консоль, так и используя GUI . Вряд ли во втором варианте возникнут сложности, поэтому мы лучше рассмотрим первый (источник):

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

Внимание: все дальнейшие действия мы совершаем под пользователем Jenkins.

Установка необходимых программ

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

Установка системы управления зависимостями cocoapods:

Чтобы наш сервер автоматически запускался при старте системы, нам необходимо настроить запуск соответствующей задачи для launchd. У нас есть выбор: сделать это через LaunchAgents или LaunchDaemon. Мы воспользуемся именно LaunchAgents, т.к. это упростит* дальнейшую работу с Jenkins. Достаточно посмотреть на таблицу ниже, чтобы понять это:

Daemon Agent
Launch Time System start User login
User Type Non-login Login
Home Folder No Yes
Login Keychain No Yes
iOS Simulator No Yes
Provisioning Profiles No Yes

*Главная проблема запуска через Daemon заключается в том, что нельзя выполнить тестирование, не запустив iOS Simulator (подробнее про разницу использования демона и агента можно прочитать здесь)

Однако из-за выбора LaunchAgents нам нужно решить проблему отсутствия залогиненного пользователя при запуске системы. Для этого необходимо настроить autologin. Мне известен только один способ это сделать: через GUI (Системные настройки -> Пользователи и группы -> Параметры входа -> Автоматический вход). Если кто-то знает, как это сделать через shell — пожалуйста, отпишитесь в комментариях!

Для настройки запуска через LaunchAgents выполним следующие шаги:

1. выгрузим демона (был создан автоматически при установки Jenkins):

источник

Управление задачами в Jenkins

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

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

Jenkins является бесплатным инструментом, обладающим огромными возможностями в виде тысяч плагинов, которые постоянно добавляются и обновляются.

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

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

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

Jenkins job builder

Это python-утилита, позволяющая описывать задачи в YAML- или JSON форматах, которые через HTTP API загружаются на сервер. Для работы достаточно установить ее на локальной машине, написать конфигурацию с подключением и описать требуемые задачи.

DSL Plugin

Это плагин для Jenkins, с помощью которого мы сможем описывать задачи на специальном языке (DSL, Domain Specific Language) и создавать их на основе этих описаний. Работает локально на самом Jenkins-сервере.

Jenkins Pipeline

Это тип задачи в Jenkins, с помощью которого мы можем описать необходимый нам процесс деплоя или сборки приложения по стадиям. Описывать pipeline мы будем в специальном Jenkinsfile, который будет храниться в репозитории проекта.

Gitlab и Gitlab CI

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

Внутри имеется собственный CI, написанный на Go, который через специальные подключаемые агенты (runners) позволяет нам проводить различные стадии сборки и деплоя.

Для начала использования достаточно в репозитории проекта создать файл .gitlab-ci.yml, в котором описать необходимую нам последовательность. Для работы отлично может использовать Docker.

Итак, начнем

Для начала поставим необходимые инструменты. Jenkins-job-builder в нашем случае необходимо установить как на локальную машину, так и на машину, где будет работать агент gitlab. Можно обойтись просто локальной машиной gitlab.

Локально на linux и mac установим последнюю доступную версию:

Локально для описания нашего seed job мы сможем протестировать его работоспособность.
Добавлю, что seed job в терминологии DSL Plugin является задача типа Free-style project, которая создает остальные задачи из DSL-скриптов.

На gitlab-сервере установка будет ничем не отличаться от локальной установки на linux-машину:

На всякий случай запустим утилиту и проверим, что она работает:

Установка плагина

Теперь установим плагин в Jenkins. Для установки можно воспользоваться как классическим UpdateCenter в разделе Manage Jenkins → Manage Plugins → Available, так и используя установку с помощью curl/wget, скачав плагин с официальной страницы плагина:

  • Версия gitlab — 9.4.4-ce.0
  • Версия gitlab-ci-multi-runner — 9.4.2

Создание репозитория

Создадим репозитории под код с описанием задач.

Для начала подготовим наш seed job — так называется задача, которая генерирует из себя все остальные. Репозиторий будет состоять из следующих файлов:

jenkins.ini

job-generator.yml

.gitlab-ci.yml

Подключим gitlab-runner к нашему проекту. Поскольку интерфейс gitlab последнее время часто меняется, то рекомендуем обращаться к официальной документации.

После подключения он будет выглядеть примерно так:

Теперь закоммитим изменения и в разделе Jobs у нашего проекта увидим следующее:

Вся схема выглядит следующим образом:

Подготовим репозиторий с описанием задач. Создадим его с названием repo-dsl и плоской структурой. Все файлы располагаются как есть.
Положим в него файл с нашим pipeline:

И настроим webhook по запуску seed-job, который мы создали ранее.

В данной версии gitlab webhooks располагаются в проекте в разделе Settings → Integrations.
Создаем webhook на push (http://gitlab:pass@ci.org/project/job-generator). Схематично это выглядит вот так:

Теперь в нашем Jenkins есть две задачи:

  1. Задача-генератор seed-job
  2. Задача типа pipeline с названием testpipeline-build.

В тестовом pipeline мы будем собирать docker-образ, который после будет загружаться в локальный docker registry. Файл с образом будет браться с другого проекта.

В проекте с названием sample-project создадим Jenkinsfile следующего содержания:

В итоге готовый pipeline будет выглядеть следующим образом в интерфейсе blueocean в Jenkins:

Или так в классическом интерфейсе:

Для запуска этой задачи автоматически мы можем добавить webhook в проекте с docker-image, где после отправки изменений в репозиторий будет запускаться эта задача.

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

источник