Как стать автором
Обновить

Запуск сервера сборки Jenkins

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров13K

Итак, в вашем репозитории накопилось количество сборок превысившее число 1. Настало время задуматься о DevOps(е). В этом тексте я напишу как развернуть локальный сервер сборки на основе Jenkins.

Пролог

Зачем все это? Дело в том, что сам по себе репозиторий с кодом это Филькина грамота, если поверх кода нет работающего сервера сборки, который даст гарантию, что "это что-то" вообще хотя бы собирается компилятором без ошибок.

Потом, сами артефакты это Филькина грамота, если отсутствуют модульные тесты, которые дадут гарантию, что *.bin(ари) вообще работают.

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

Идея проста. Сервер сборки это просто инфраструктурный прикладной процесс\утилита, который периодически запускает скрипты построения конкретных сборок и затем сохраняет результат (артефакты) в конкретную папку или архив. Обычно сервер сборки работает автономно 24/7 и собирает артефакты из репозитория с кодом сразу после новых коммитов.

Когда кому-то понадобится артефакты (прошивка), можно зайти в Web GUI и там выбирать, то, что нужно прямо как в супермаркете.

Достоинство серверов сборки

  • Всегда есть артефакт для отгрузки. Если не вчерашний, то позавчерашний.

  • Есть сортировка сборок по различным атрибутам. Размер бинаря, время сборки.

  • Сразу видны конфликты. Какие сборки с чем конфликтуют. Можно не глядя на код уже примерно понять в каком программном компоненте ошибки.

  • Можно анализировать полный лог сборки

  • Экономия времени на разработку и ускорение разработки в общем. Вам не придется больше ждать пока локально соберется код (3....7мин по 20 раз в день). Вы локально будете только редактировать код и делать коммиты. Вам даже не обязательно локально устанавливать ToolChain. Всё будет происходить на сервере сборки. Сервер сборки сэкономит вам 2...2,5 часа в день.

  • Быстрая отгрузка артефактов. Например вас попросили собрать артефакт для какой-то конкретной платы. Вы просто дадите готовый артефакт из сервера сборки.

  • Контроль прохождения модульных тестов

  • Сервер сборки нужен для контроля качества работы программистов. Тут всё просто. У хороших программистов сборки собираются, а модульные тесты проходят. У плохих программистов сборки не собираются, а тесты не проходят.

  • Простой контроль целостности репозитория

  • Азарт при разработке софтвера. Появляется желание исправить все конфликты в кодовой базе и построить по-настоящему модульный код.

Недостатки сервера сборки

  • При неправильной сборке могут переполнить жесткий диск. Всегда в настройках Jenkins Job(а) указывайте максимальное количество сборок, которое будет храниться на PC для каждой конкретной сборки. В противном случае вы просто переполните себе жесткий диск. У меня был случай как за полтора года Jenkins сохранил 79GByte артефактов и мне пришлось его сносить.

  • Желателен отдельный PC(NetTop) для работы сервера

  • Нужно вручную мышкой конфигурировать каждую сборку в Web интерфейсе

Пошаговое руководство запуска Jenkins на Win

Какой понадобится софтвер?

Программа

Назначение

*jdk-11.0.16.1_windows-x64_bin.exe

Виртуальная машина для работы сервера сборки

Notepad++.exe

Текстовый редактор для изменения конфигов

*Windows 10

Операционная система для сервера сборки

git.exe

Система контроля версий исходных кодов

gcc.exe

Компилятор С кода. Входит в состав CygWin

make.exe

Культовая утилита сборки сорцов. Входит в состав CygWin

TeamViewer.exe

Удаленный доступ к NetTop для коллективного доступа к серверу сборки

*Tor Browser

Для скачивания JDK на санкционных территориях

Chrome.exe

Браузер для просмотра таблицы сборок

*jenkins.exe

Сервер сборки

Звездочной * отмечены ключевые программные компоненты. Остальное можно и заменить альтернативами.

Фаза 1: Установка Java Runtime Environment

Дело в том, что Jenkins работает поверх виртуальной машины Java. Так сделано специально, чтобы программа была переносима между различными операционными системами. Поэтому перед установкой Jenkins надо установить Java Runtime Environment(JRE). JRE это виртуальная машина для исполнения байт-кода, который генерирует компилятор Java. JRE входит в состав Java Development Kit(JDK). Это компилятор языка Java и Java Runtime Environment.

Если у вас нет java, то консоль Windows напишет это

C:\Users\xxx>java -version
'java' is not recognized as an internal or external command,
operable program or batch file.
C:\Users\xxx>

Всю JDK можно скачать по этой ссылке

https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html

Сразу хочу отметить, что скачивать что-либо с сайта www.oracle.com следкет через Tor браузер так как РФ у них числится санкционной территорией. Плюс нужна регистрация сайте oracle. Надо скачать файл jdk-11.0.16.1_windows-x64_bin.exe

Скачивается jdk-11.0.16.1_windows-x64_bin.exe очень долго. Порядка часа. Получив дистрибутив запускаем установку

Запоминает адрес установки C:\Program Files\Java\jdk-11.0.16.1\ Он нам пригодится при установке Jenkins.

Признаком того, что Java установилась служит сообщение версии Java

C:\Users\xxxx>java -version
java version "11.0.16.1" 2022-08-18 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.16.1+1-LTS-1)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.16.1+1-LTS-1, mixed mode)

C:\Users\xxxx>

Фаза 2: Установка Jenkins

Прежде всего Jenkins надо установить на NetTop. Допустим у вас Windows. Скачать дистрибутив можно с официального сайта https://www.jenkins.io/download/

Указываем путь установки

Надо указать, что сервер будет работало локально

Указывает порт на котором будет работать Jenkins. По умолчанию 8080

Вот тут как раз следует прописать путь к JDK. C:\Program Files\Java\jdk-11.0.16.1


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

Как же открыть Jenkins? Надо в браузере и набрать этот URL

 http://localhost:8080

придется настроить Jenkins. Jenkins попросит admin password из файла C:\Program Files\Jenkins\jenkins.err.log

Также придется еще подождать пока произойдет настройка плагинов. Это примерно 30 мин.

осталось только придумать логин и пароль

Открыть браузер и указать снова URL http://localhost:8080

и вот долгожданное сообщение. Jenkins установился.

Теперь остается только наполнить сервер задачами. Тут их называют Job(ами)

Фаза 4: Создание задачи Job(а)

Как же создать Jenkins Job, первую сборку?

Открывает URL http://localhost:8080/. Нажимаем New Item,

Надо придумать название сборки.

Пишем название сборки nrf5340_dk_headset_app_cmake, выбираем Freestyle project

А вот тут очень важно. Надо активировать опцию удаления устаревших сборок (Discard old builds). Иначе Jenkins увеличит папку C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins\.jenkins\jobs до запредельных размеров. У меня как-то за полтора года набралось 79 GByte артефактов.

Надо указать адрес Workspace в котором данный Job будет искать скрипты сборки. То есть заполнить поле Use custom workspace

Надо указать при каких событиях будет происходить сборка. Самое простое это сказать, что надо собирать каждые 2 часа. Написать H H/2 * * *

Надо создать команду самой сборки. Нажимаем на кнопку Add build step

При работе в Windows выбираем Execute Windows batch command

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

Последний шаг это сохранить артефакты. Нажимаем Add post-build action.

и выбираем вариант Archive the artefacts

И указывает конкретные расширения, которые надо сохранить

source/projects/board_build_cmake/build/**/*.elf, source/projects/board_build_cmake/build/**/*.hex, source/projects/board_build_cmake/build/**/*.bin, source/projects/board_build_cmake/build/**/*.dts, source/projects/board_build_cmake/build/**/*.map

надо прописать это в поле Archive the artifacts

Сборка настроена. Нажимаем Save.

Чтобы инициировать сборку надо нажать на кнопку Build Now. Как видно сборка собралась.

Тут сразу появилось множество интересных метрик: длительность сборки, размер прошивки, лог сборки, *.elf файл для отладки.

После всего этого вы можете конечно написать: "я не буду пользоваться сервером сборки потому, что у меня нет отдельного компьютера, а при работе в моём Workspace работающий Jenkins будет мне только мешать".

Разруливается эта ситуация очень просто. Вы организуете на своем локальном компьютере 2 репозитория: workspace и release. Workspace для редактирования кода, а release для генерации release(ных) артефактов. Release репозиторий он, как бы, только read only. Release репозиторий пополнять только из git pull(ами). Это важно, чтобы гарантировать, что все зависимости проиндексированы и находятся в репозитории c кодом.

В идеале надо, конечно же, отдельный компьютер с сервером сборки (Зомбик), чтобы на него могли заходить все заинтересованный в артефактах: разработчики, тестировщики, интеграторы, клиенты. Общий доступ можно организовать через TeamViewer или RDP.

Вот теперь вы умеете накатывать Jenkins и можете даже учить этому других.

Вывод

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

Links

https://www.jenkins.io/doc/book/installing/windows/

https://www.dmosk.ru/miniinstruktions.php?mini=jenkins-ubuntu

https://habr.com/ru/companies/southbridge/articles/741358/

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы пользуетесь серверами сборки?
80.95% да34
19.05% нет8
Проголосовали 42 пользователя. Воздержались 5 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы пользуетесь Jenkins?
68.75% да33
31.25% нет15
Проголосовали 48 пользователей. Воздержались 5 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
У вас сервер сборки работает локально?
27.27% да9
72.73% нет24
Проголосовали 33 пользователя. Воздержались 8 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
У вас сервер сборки работает удаленно?
83.87% да26
16.13% нет5
Проголосовал 31 пользователь. Воздержались 7 пользователей.
Теги:
Хабы:
Всего голосов 11: ↑4 и ↓7-3
Комментарии23

Публикации