Jenkins для начинающих.
В прошлых заметках уже немного упоминал о том, что начал потихоньку разбираться с вопросами CI∕CD. Чтобы закрепить у себя и попутно нанести пользу моим 59 подписчикам решил запилить небольшую серию постов по этим экспериментам. Самые основы со скриншотами.
Для начала минимум терминологии, CI∕CD включает в себя 2 понятия:
- Continuous integration (непрерывная интеграция) — подход при котором ПО раз в определенное время или после каждого коммита (обычно подразумевается одобренный коммит в мастер или dev) компилируется, тестируется и, если успешно прошло тесты, собирается в новую версию.
- Continuous deployment (непрерывное развертывание) — подход при котором новый пакет приложения (или новые образы докера и т.д.) автоматически отправляются на боевой сервер и развертываются незаметно для пользователя.
Как понятно из описания, это по большей части концепции и подходы. Их исполнение можно обеспечить множеством инструментов. Мы будем говорить преимущественно о Jenkins, но также заденем тестирование и bash скрипты.
Jenkins — программная система с открытым кодом на Java, которая как раз позволяет наладить непрерывную интеграцию и развертывание вашего проекта.
В этой части установим Jenkins и «подружим» с github, а уже в следующей накидаем наноприложение с тестами и напишем jenkins pipeline.
Установка Jenkins
Поскольку сам jenkins написан на Java, и в пайплайнах частично использует её синтаксис, перед установкой необходимо поставить openjdk-8-jdk.
После этого добавляем Jenkins репозиторий и устанавливаем само приложение.
$ sudo sh -c ‘echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list’
Проверить статус установленного сервиса можно так:
Если приложение активно, вы должны будете увидеть что-то подобное:
После этого заходим в браузере на localhost:8080 и видим стартовую страницу настройки:
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Получаем пароль для запуска -> устанавливаем необходимые плагины (можно просто выбрать установку по умолчанию) -> создаем профиль (для теста можно просто продолжить как админ.) -> Та-дааа! Можно создавать первый пайплайн.
Поскольку это тестовый запуск «на поиграться», можно отключить авторизацию с помощью пароля.
-> открываем файл /var/lib/jenkins/config.xml
-> меняем ` true ` на false
-> в браузере прописываем localhost:8080/restart (или другую ссылку /restart, если вы меняли url при установке)
Настраиваем права доступа
Linux
Генерируем пару ssh ключей (чуть более подробно о генерации ключей писал здесь ).
В левом верхнем меню переходим во вкладку `credentials`
Как установить 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:
Проверяем успешность установки:
Здесь необходимо запомнить значение 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:
Ошибка доступа больше не выводится:
После того, как мы указали репозиторий из которого необходимо получать исходный код, переходим к настройки сборки.
Находим раздел “Сборка”, нажимаем “Добавить шаг сборки” и выбираем из выпадающего списка “Вызвать цели Maven верхнего уровня”
Вставляем в поле “Цели” команды для сборки maven-проекта.
Результат сборки будет сохраняться в папке /var/lib/jenkins/workspace/Lolipop/target/, где Lolipop — название нашего проекта. В данном примере результатом сборки будет готовый к развертыванию war-файл.
В качестве примера рассмотрим, каким образом автоматизировать процесс развертывания war-файла на веб-сервер Jetty, который работает на этой же машине.
О Jetty и его установке можно более подробно прочитать здесь.
Добавим еще один шаг сборки, который будет копировать war файл в папку webapps Jetty и перезапускать его. На этот раз выбираем из выпадающего списка “Выполнить команду shell”.
На этом настройка сборки закончена, нажимаем «Сохранить» и переходим к запуску.
Шаг 7. Запуск сборки
Для запуска сборки в меню выбираем “Собрать сейчас”. После этого в левом нижнем углу в разделе “История сборок” появится индикатор процесса сборки с датой и временем запуска:
Во время сборки Jetty будет выполнять последовательно следующие задачи:
- Загрузка из Git репозитория последней версии исходного кода проекта
- Запуск сборки загруженного Maven проекта
- Размещение результатов сборки в папке workspace
- Копирование war файла в папку webapps веб-сервера Jetty
- Перезапуск 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 незаменимым инструментом при построении процесса разработки.
Руководство по Jenkins
В руководстве мы расскажем, зачем нужен Jenkins, а также покажем, как установить Jenkins на Ubuntu.
Jenkins — это сервис, с помощью которого можно автоматизировать процесс непрерывной интеграции программного обеспечения. Непрерывная интеграция (Continuous Integration) — один из этапов разработки, на котором происходит сборка рабочих копий проекта в единый макет-черновик, их тестирование, доставка или развёртывание программного обеспечения. Во время интеграции можно выявить слабые места и возможные ошибки в проекте и сразу их исправить.
На этапе интеграции разработчики объединяют код вручную, что занимает много времени. Jenkins позволяет автоматизировать этот этап. Сервис подойдёт как для профессионалов, так и для начинающих специалистов.
- имеет открытый исходный код, написанный на Java;
- поддерживает свыше 1000 плагинов для интеграции с инструментами тестирования, разработки и деплоя;
- работает больше чем в двух средах одновременно без потери эффективности;
- Jenkins хорошо подойдёт для проектов, которые написаны на Python;
- оптимизирует рабочий процесс: вам не нужно нанимать штат профессиональных программистов, в Jenkins можно разобраться даже без специальной подготовки;
- выявляет и устраняет нестандартные ошибки без привлечения человека;
- минимизирует количество ошибок, возникающих в связи с человеческим фактором.
Jenkins можно установить на Windows, macOS, Debian, Ubuntu, CentOS и другие операционные системы. Также Jenkins можно установить через системные пакеты, Docker или запустить автономно на любом компьютере с настроенной Java Runtime Environment (JRE).
Jenkins можно установить с официального сайта одним из двух способов: скачать из раздела «Download» или использовать команды из раздела «Documentation». Для Jenkins документация на русском не разработана, однако именно в этом разделе можно найти рекомендации для быстрой установки. Поэтому установим Jenkins на Ubuntu версий 16.04/18.04/20.04 вторым способом.
Как установить Jenkins
Для Jenkins системные требования следующие:
- 256 Мб оперативной памяти,
- минимум 1 Гб дискового пространства при установке на ОС и 10 Гб при запуске в качестве контейнера Docker.