Как установить и использовать Jenkins для создания конвейера CI / CD — CloudSavvy IT

2 min


логотип дженкинс

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

Что такое Дженкинс?

Изначально Jenkins был создан для единственной цели — для автоматизации сборки и тестирования ночных сборок программного обеспечения. Новые коммиты должны регулярно интегрироваться в основную ветку (часто называемую «непрерывной интеграцией»), что часто включает в себя тяжелое тестирование, чтобы убедиться, что все работает гладко. Делать это один раз в неделю — это одно, но когда вы интегрируете несколько раз в день, для всех лучше, чтобы это был автоматический процесс.

Jenkins и другие подобные CI / CD-решения ускоряют этот процесс. Вы можете думать об этом как об автоматическом сценарии оболочки. Например, чтобы выпустить новую сборку приложения React, вам может потребоваться запустить npm install, npm run buildзатем запустите тестирование Шутка чтобы убедиться, что новая сборка проходит все тесты. Если он успешен, вы можете отправить его в среду тестирования для проверки вручную или просто опубликовать новый выпуск напрямую. Все эти команды вы можете написать довольно легко.

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

У Дженкинса есть два главных выпуска, Синий океани классика. Blue Ocean более поздняя и включает в себя упрощенный интерфейс, который значительно упрощает создание конвейеров. Мы будем использовать Blue Ocean для этого руководства, но большинство одинаковых концепций будут применяться к обеим версиям Jenkins.

Установка Дженкинс

Двоичные файлы Jenkin доступны для нескольких операционных систем, но обычно не из менеджеров пакетов по умолчанию. Если вы используете Ubuntu, вы можете загрузить и установить его с помощью следующих нескольких команд:

wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins

Чтобы сделать платформу независимой, мы будем запускать Jenkins с помощью Docker, который в любом случае рекомендует Jenkins.

Установка Docker

Docker — это платформа для запуска приложений в «контейнерах»; Контейнер включает все необходимые зависимости и гарантирует, что приложение будет работать одинаково независимо от базовой операционной системы — все, что вам нужно сделать, это установить докер для вашей системы, и выполните несколько команд.

Для Ubuntu вам необходимо установить некоторые предварительные условия:

sudo apt install apt-transport-https ca-certificates curl software-properties-common

Затем добавьте ключ GPG в Docker:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

И добавьте сам репо:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

Обновите свои источники:

apt update

И, наконец, установите Docker из apt:

sudo apt install docker-ce

Теперь в вашей системе должен быть запущен Docker, который вы можете проверить с помощью systemctl,

Настройка Дженкинс

Когда Docker запущен и работает, вы можете настроить контейнер Docker для Jenkins. Сначала вам понадобится мостовая сеть для контейнеров общаться на:

docker network create jenkins

Docker по своей природе эфемерен — все данные, хранящиеся в контейнерах, будут удалены при остановке этих контейнеров. Чтобы предотвратить это, вы хотите хранить данные на томах Docker, которые будут сохраняться на диске. Вам понадобятся два тома: один для некоторых сертификатов TLS, которым Jenkins необходимо соединиться с Docker, а другой — для всех ваших данных Jenkins. Они будут связаны с контейнером во время выполнения.

docker volume create jenkins-docker-certs
docker volume create jenkins-data

Дженкинс на самом деле должен иметь возможность запускать Docker как часть своей работы для настройки сред сборки. Это невозможно с обычным Docker, поэтому для правильной работы вам нужно запустить «Docker in Docker» или DinD. Следующая команда запустит официальный Docker docker:dind контейнера, привяжите к нему сеть и тома, созданные на предыдущих шагах, и опубликуйте его как службу, работающую на порту 2376 для использования контейнером Jenkins. Вы можете сменить этот порт, если хотите, хотя вам придется изменить его и на следующем шаге.

docker container run --name jenkins-docker --rm --detach 
--privileged --network jenkins --network-alias docker 
--env DOCKER_TLS_CERTDIR=/certs 
--volume jenkins-docker-certs:/certs/client 
--volume jenkins-data:/var/jenkins_home 
--publish 2376:2376 docker:dind

С этой настройкой вы можете запустить jenkinsci/blueocean Контейнер с помощью следующей команды:

docker container run --name jenkins-blueocean --rm --detach 
--network jenkins --env DOCKER_HOST=tcp://docker:2376 
--env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 
--volume jenkins-data:/var/jenkins_home 
--volume jenkins-docker-certs:/certs/client:ro 
--publish 8080:8080 --publish 50000:50000 jenkinsci/blueocean

Это позволит смонтировать сеть и диски, установить DOCKER_HOST переменная для порта, на котором работает DinD, и опубликуйте сервис на порту 8080, который вы можете изменить, если он не бесплатный. (Формат host:container.) Также публикуется административное соединение Jenkin через порт 50000, если вы планируете настроить главный сервер Jenkins с несколькими распределенные сборки подключиться к нему.

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

Дженкинс Войти

Вам нужно будет ввести пароль, хранящийся в /var/jenkins_home/, который является частью тома Docker. Чтобы получить к нему доступ, вам нужно запустить cat внутри контейнера Docker:

docker container exec -it jenkins-blueocean cat /var/jenkins_home/secrets/initialAdminPassword

Это распечатает пароль, который вы можете скопировать и начать остальные настройки.

Вам будет предложено настроить имя пользователя и пароль администратора, установить различные плагины. Выбор «Установить рекомендуемые плагины» просто установит множество рекомендуемых сообществом для запуска. Вы всегда можете установить позже.

Создание конвейера

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

Дженкинс создает новый трубопровод

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

Дженкинс подключиться к мерзавцу

Однако лучшим решением будет просто выбрать общий «Git». Введите в свой URL хранилища, и Дженкинс даст вам открытый ключ. Поскольку Jenkins может совершать коммиты (и всегда фиксирует изменения в конфигурации конвейера), вы должны создать нового пользователя сервиса и добавить к нему открытый ключ.

Дженкинс Конфиг

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

Дженкинс строитель

Каждый конвейер будет иметь несколько отдельных этапов, таких как Build, Test или Deploy, которые будут содержать отдельные этапы. Они могут выполнять самые разные действия, такие как отправка электронных писем, взаимодействовать с другими службами, такими как Jira и Git, и координировать последовательность других шагов, но вы чаще всего будете использовать их для выполнения простых сценариев оболочки. Любые ошибки в возврате этих сценариев приведут к сбою конвейера.

Прежде чем добавлять какие-либо этапы, вы захотите настроить параметры среды. Обычно вы используете Docker-контейнер, такой как node:latest,

Для этого примера мы создадим веб-приложение на основе Node. Просто добавив два шага для npm install и npm run build это все что нужно. Дженкинс выполнит эти команды и перейдет к следующему этапу с установленными артефактами сборки. На этапе тестирования настройка сценария оболочки для запуска Jest потребует прохождения всех тестов для успешной сборки.

Дженкинс может запустить несколько этапов параллельно, что полезно, если вам нужно проверить на нескольких разных платформах. Вы можете настроить этапы «Тестирование в Linux» и «Тестирование в Windows» и запускать их одновременно, чтобы не ждать, пока один из них запустит другой. Если один из них выходит из строя, конвейер все равно будет отказывать.

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

экран сборки Дженкинс

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


0 Comments

Ваш адрес email не будет опубликован. Обязательные поля помечены *