В этой статье я поделюсь пошаговым руководством по созданию конвейера непрерывной интеграции и непрерывной доставки (CI / CD) с помощью Jenkins. И как этот конвейер настроен для создания образов Docker. Кроме того, я интегрировал Jenkins со Splunk, чтобы обеспечить возможность отслеживать и оценивать их операционные характеристики.

Освежение некоторых важных концепций

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

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

Непрерывное развертывание - это более высокая степень автоматизации, при которой сборка / развертывание происходит автоматически всякий раз, когда в код вносятся огромные изменения.

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

У Дженкинса есть несколько основных концепций:

  • Работа - единица работы, например линтинг, выполнение теста или проверка владельца.
  • Конвейер - система последовательности, в которой одно действие обычно выполняется тогда и только тогда, когда предыдущее действие было успешно выполнено. Также доступны варианты распараллеливания вашей работы.
  • Очередь - Jenkins автоматически поддерживает очередь заданий, которая должна выполняться, когда становится доступна достаточная емкость.
  • Плагин. Как и WordPress, у Jenkins есть множество плагинов, которые вы можете установить в дополнение к функциям по умолчанию.
  • Главный / подчиненный - «главный» сервер Jenkins обеспечивает работу веб-сайта и координирует работу, выполняемую в вашей установке Jenkins. Он общается с «подчиненными» машинами, которые фактически выполняют вашу работу. Это означает, что вы можете увеличивать / уменьшать количество рабочих Jenkins, которые вы используете в своем кластере, для управления мощностью.

Docker - это инструмент, который позволяет легко совместно использовать, развертывать и последовательно запускать приложения во многих средах через контейнеры. Во-первых, мне нужно было получить доступ к командной строке Docker (CLI). Инструкции по установке Docker не очень ясны и понятны, но вам необходимо загрузить Docker Desktop (для Mac или Windows).

Кроме того, Docker Hub похож на GitHub для репозиториев git или реестр npmjs для пакетов JavaScript - это онлайн-репозиторий образов Docker и логин, к которому будет подключаться Docker Desktop.

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

Dockerfile - это текстовый файл, который Docker читает сверху вниз. Он содержит набор инструкций, которые информируют Docker о том, как должен быть создан образ Docker.

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

  • FROM - запустить Dockerfile и извлечь из базового образа.
  • КОПИРОВАТЬ - копировать файлы из локального источника в целевой контейнер.
  • WORKDIR - Установить рабочий каталог для последующих команд.
  • RUN - Выполнить команды
  • EXPOSE - Установить порт
  • ENTRYPOINT - Установить исполняемую команду

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

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

Splunk - это проприетарное программное обеспечение, которое на сегодняшний день выпускается в трех вариантах:

  1. Splunk Enterprise - самое популярное локальное решение и система потоковой обработки Splunk.
  2. Splunk Lite - это подмножество функций, предлагаемых Splunk Enterprise, но без коммерческой лицензии.
  3. Splunk Cloud - Splunk предлагается в облаке в качестве предложения Saas. Но компаниям, у которых есть проблемы с управлением данными, следует внимательно это оценить, поскольку данные хранятся в облаке.

Реализация проекта

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

Начнем с настройки Jenkins для проекта

Для этого проекта я установил Jenkins в инстансе Amazon Linux EC2. Сначала мы запустим экземпляр, а затем вы узнаете о различных командах, используемых для установки и использования Jenkins.

Шаг 1. Запуск экземпляра Amazon Linux EC2

я. Используя консоль AWS, на панели управления Amazon EC2 выберите Запустить экземпляр.

II. На странице Выбор образа машины Amazon (AMI) отображается список основных конфигураций, называемых образами машин Amazon, которые служат шаблонами для вашего экземпляра. Выберите Amazon Linux 2 AMI.

iii. На странице Выбор типа экземпляра выберите тип экземпляра по умолчанию t2.micro в качестве аппаратной конфигурации вашего экземпляра.

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

#! /bin/sh
yum update -y
amazon-linux-extras install docker
service docker start
usermod -a -G docker ec2-user
chkconfig docker on

v. Продолжите с настройками по умолчанию и перейдите к Шагу 6: Настройка группы безопасности, выберите Создать новую группу безопасности, теперь дайте ей имя и добавьте следующие правила.

vi. Теперь перейдите в раздел Просмотр и запуск, запустите экземпляр с новой парой ключей и загрузите его.

vii. После успешного запуска экземпляра подключитесь к своему экземпляру, используя загруженную пару ключей.

Шаг 2. Установка Jenkins на экземпляр EC2

я. Запустите команду, чтобы обновить все пакеты.

sudo yum update

II. Проверьте, установлена ​​ли java или нет, используя команду

java -version

Если java не установлен, установите с помощью следующей команды

sudo yum install java-1.8.0-openjdk

iii. Теперь, чтобы загрузить последний пакет Jenkins

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo

iv. Чтобы включить установку пакета, импортируйте файл ключа из Jenkins-CI:

sudo rpm — import https://pkg.jenkins.io/redhat/jenkins.io.key

v. Установите Jenkins на экземпляр EC2

sudo yum install jenkins

vi. Чтобы запустить службу Jenkins

sudo service jenkins start

vii. Получите доступ к серверу Jenkins, используя общедоступный DNS экземпляра EC2 или общедоступный IP-адрес экземпляра на порту 8080.

http: // {ec2-public-dns}: 8080 или http://3.89.79.74:8080/

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

sudo su –
cd /var/lib/jenkins/secrets/
cat initialAdminPassword

ix. Чтобы остановить службу Jenkins

sudo service jenkins stop

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

Шаг 3. Создайте конвейер CICD в Jenkins для создания образа Docker и отправьте его в Docker Hub.

В этом проекте мы настроим конвейер сборки Jenkins для сборки, компиляции и упаковки небольшого проекта maven в работающий образ Docker. В процессе сборки Jenkins будет создан образ Docker с помощью файла Dockerfile. По сути, конвейер Jenkins спроектирован таким образом, что всякий раз, когда изменение отправляется из локального репозитория в репозиторий Git, Jenkins обнаруживает это изменение и автоматически начинает сборку проекта. Таким образом, он создаст образ докера и отправит его в репозиторий Docker Hub. Чтобы завершить проект, выполните следующие действия.

я. Во-первых, в качестве предварительных условий настройте git на вашем локальном компьютере и создайте репозиторий GitHub. Теперь отправьте весь свой код в удаленный репозиторий Git.

II. Теперь в вашем ранее созданном экземпляре EC2 выполните следующие команды, чтобы установить git и maven, необходимые для нашего проекта.

Шаги по установке Git:

sudo yum install git -y
git version

Шаги по установке Maven:

sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
sudo sed -i s/\$releasever/6/g /etc/yum.repos.d/epel-apache-maven.repo
sudo yum install -y apache-maven
mvn --version

iii. Затем мы установим необходимые плагины для нашего проекта, войдем в консоль Jenkins и перейдем через графический интерфейс Jenkins - ›Управление Jenkins -› Управление плагинами . Перейдите на вкладку «Доступен», выберите все плагины, перечисленные ниже, а затем нажмите «Установить без перезапуска». Этот шаг является наиболее важным, поскольку он позволит нам получить доступ к коду из нашего репозитория git и поможет нам в создании образа докера.

Необходимые плагины для Git:

Необходимые плагины для докера:

  • Плагин CloudBees Docker для сборки и публикации
  • Плагин Docker
  • docker-build-step

iv. Переходя к следующему шагу, мы создадим наш конвейер для этого проекта. Итак, после того, как установка плагинов будет завершена, вернитесь в Личный кабинет. Через Jenkins - ›Новый элемент вы попадете на страницу, на которой вы сможете указать, какой тип элемента вы хотите создать. Выберите вариант Freestyle Project, дайте подходящее имя и нажмите OK.

Шаг 4. Настройте и выполните задание конвейера

Чтобы настроить конвейер, выберите параметр GitHub Project и добавьте URL-адрес репозитория GitHub. Точно так же в Управление исходным кодом выберите Git и добавьте URL-адрес репозитория Git, как показано на изображении ниже.

Это позволит Дженкинсу получить доступ к исходному коду из репозитория git, включая Dockerfile, который используется для создания образов докеров.

В Триггеры сборки выберите SCM опроса и в Расписание введите пять звездочек (например, '* * * * *'), это означает, что Дженкинс автоматически запускает сборку для всех входящих коммитов git.

Теперь перейдите в раздел Сборка и в раскрывающемся списке выберите Вызов целей Maven верхнего уровня, а в разделе Цели укажите установку для выполнения. установки для maven.

Теперь, чтобы завершить конвейер, мы должны создать и отправить созданный образ Docker в Docker Hub. Для этого нажмите Добавить этап сборки и выберите Сборка и публикация Docker. Введите имя репозитория Docker Hub и добавьте учетные данные Docker Hub.

Наконец, чтобы увидеть результат, нажмите Создать сейчас и просмотрите консоль. Также обратите внимание на изображение, помещенное в реестр Docker Hub.

Затем нам нужно интегрировать Jenkins со Splunk

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

Примечание. Прежде чем двигаться дальше, создайте учетную запись на Splunk.com, чтобы получить к ней доступ.

Шаг 5. Установка Splunk на AWS EC2 с помощью Splunk Enterprise AMI

Для этого проекта я настроил Splunk в экземпляре AWS EC2 с помощью Splunk Enterprise AMI. Выполните следующие шаги, чтобы запустить экземпляр.

я. После входа в систему перейдите в Консоль AWS, а затем перейдите через Службы - ›EC2 -› Запуск экземпляров. На странице Выберите образ машины Amazon (AMI) нажмите AWS Marketplace, выполните поиск в Splunk, как показано ниже, и выберите Splunk Enterprise AMI.

II. На странице Выбор типа экземпляра выберите тип экземпляра по умолчанию t2.micro в качестве аппаратной конфигурации вашего экземпляра.

iii. В разделе Настроить сведения об экземпляре запустите экземпляр в общедоступной подсети вместе с включенным общедоступным IP-адресом.

iv. Продолжите с настройками по умолчанию и перейдите к Шагу 6: Настройка группы безопасности, выберите Создать новую группу безопасности, вы заметите, что Splunk AMI уже активировал эти следующие порты.

Добавьте в этот список еще один порт, например 8088, чтобы настроить Splunk HTTP Event Collector (HEC).

v. Теперь перейдите в раздел Просмотр и запуск, запустите экземпляр с новой парой ключей и загрузите его.

Шаг 6: Установка приложения Splunk для Jenkins

Когда ваш экземпляр будет готов, войдите в свой веб-интерфейс Splunk, используя URL-адрес http: // ‹PublicDNSOfSplunkInstance›: 8000. Здесь имя пользователя по умолчанию - admin, а пароль - SPLUNK- ‹EC2InstanceID›.

После входа в систему перейдите через Управление приложениями - ›Просмотреть другие приложения и найдите Jenkins, как показано на снимке ниже. Теперь установите приложение Splunk для Jenkins. Когда вы нажимаете «Установить», вас просят ввести свои учетные данные Splunk.com, чтобы загрузить приложение.

Плагин Splunk Jenkins использует сборщик событий HTTP для отправки данных в Splunk. Чтобы узнать больше, нажмите «Просмотр на Splunkbase».

Теперь, вернувшись к панели управления, вы увидите, что приложение Splunk для Jenkins успешно установлено.

Теперь, чтобы интегрировать Splunk с Jenkins, перейдите через Настройки - ›Ввод данных -› Сборщик событий HTTP. Создайте новый токен сборщика событий HTTP (HEC) в Splunk, указав действительное имя. А пока оставьте настройки по умолчанию, завершите процесс и скопируйте сгенерированный токен для дальнейшего использования.

Шаг 7. Настройте Jenkins для интеграции Splunk

я. Теперь перейдите в Jenkins, перейдите в раздел Управление Jenkins - ›Управление плагинами, на этой странице найдите плагин Splunk, установите флажок для плагина Splunk и затем выберите ваше предпочтение перезапуска для установки.

II. После установки плагина перейдите в Управление Jenkins - ›Настроить систему. Здесь перейдите к разделу Splunk для конфигурации Jenkins. Теперь заполните детали, как указано ниже:

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

Хост ввода HTTP - укажите имя хоста индексатора Splunk, на котором вы установили приложение Splunk для Jenkins.

Входной порт HTTP. Укажите порт для связи со Splunk, по умолчанию это 8088.

Входной токен HTTP - скопируйте токен сборщика событий HTTP, созданный выше .

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

Отправлять все журналы консоли конвейера. Установите этот флажок, поскольку мы хотим, чтобы все журналы конвейера индексировались в Splunk.

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

iii. Теперь, наконец, нажмите Проверить соединение, вы должны получить сообщение «Соединение Splunk подтверждено». Если да, то интеграция завершена.

iv. Теперь, чтобы просмотреть внесенные изменения, перезапустите Jenkins и Splunk.

Шаг 8: панели инструментов Splunk для Jenkins

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

Вот некоторые из ключевых функций, предоставляемых Splunk:

  • Обзор - визуализируйте несколько ведущих и связанных ведомых устройств на одной странице. Просматривайте тенденции состояния сборки и получайте подробную информацию о любой сборке.
  • Анализ сборки - легко находите любую сборку Jenkins с помощью множества простых в использовании фильтров. Просмотрите сводку сборки или разверните, чтобы увидеть тенденции состояния сборки, время сборки и анализ времени очереди, тенденции прохождения / сбоя теста, распределение времени выполнения теста и журналы консоли.
  • Анализ тестов. Результаты тестов показывают все неудачные тесты с трассировкой стека, помечают ошибки регрессии, группируют сбои тестов по ошибкам, фиксируют переменные среды Jenkins и предоставляют отличные фильтры для поиска тестов.
  • Jenkins Health - Splunk Jenkins Apps собирает внутреннюю информацию JVM Jenkins, а также ключевые показатели, такие как размер очереди, статистику исполнителей и узлов, главные журналы Jenkins и статистику узлов Jenkins.
  • Узлы Jenkins. Эта функция чрезвычайно полезна для выявления проблемных компонентов в кластере Jenkins и оптимизации производительности вашей команды.
  • Контрольный журнал - функция контрольного журнала позволяет вам видеть, кто вошел в вашу систему Jenkins и выполнял любые действия, такие как запуск / прерывание / изменение заданий.

На снимке ниже показаны журналы и артефакты конвейера сборки. Таким образом, вы можете продолжить и изучить инструмент Splunk.

Надеюсь, вы найдете этот блог полезным. Спасибо за чтение.

Больше контента на plainenglish.io