Используемые технологии/инструменты: Jenkins, Git, linux (в данном случае RHEL 8), GitHub, Docker.

Git: чтобы получить код, который разработчик фиксирует, и при необходимости в будущем любой может изменить код разработчика. Ссылка на Github для кодов HTML и PHP, необходимых для проекта.

Docker: Docker — еще один инструмент, предназначенный для упрощения создания, развертывания и запуска приложений с использованием контейнеров в слабо изолированной среде. Изоляция и безопасность позволяют одновременно запускать множество контейнеров на данном хосте. Он запускает контейнер в течение нескольких секунд.

Jenkins: Jenkins — это сервер автоматизации с открытым исходным кодом, написанный на Java. Он используется для непрерывной сборки и тестирования программных проектов, что позволяет разработчикам настраивать среду CI/CD.

CI/CD — это непрерывная интеграция и непрерывное развертывание.

Скрипт Python: для отправки почты заинтересованному лицу в случае возникновения какой-либо проблемы.

Операционная система RedHat: операционная система, в которой мы создаем наш Dockerfile.

ЗАДАЧА -

1. Создайте образ контейнера с установленным Jenkins с помощью Dockerfile.

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

3. Создайте цепочку заданий job1, job2, job3 и job4, используя плагин конвейера сборки в Jenkins.

4. Job1: автоматическое получение репозитория Github, когда некоторые разработчики отправляют репозиторий на Github.

5. Job2: просматривая код или программный файл, Jenkins должен автоматически запустить контейнер установки соответствующего языкового интерпретатора для развертывания кода (например, если код написан на PHP, то Jenkins должен запустить контейнер с уже установленным PHP).

6. Job3: проверьте свое приложение, работает оно или нет.

7. Job4: если приложение не работает, отправьте электронное письмо разработчику с сообщениями об ошибках.

8. Создайте одно дополнительное задание job5 для монитора: если контейнер, в котором запущено приложение. происходит сбой из-за какого-либо резонанса, то это задание должно автоматически снова запускать контейнер.

Решение:-

Наш первый шаг, создание Dockerfile. Во-первых, мы должны создать папку внутри корня с помощью команды mkdir task2/. Затем зайдите в эту папку с помощью команды cd и создайте файл докера с помощью команды gedit Dockerfile.

В этом Dockerfile я написал несколько команд для разных целей.

Здесь я использовал base_os как centos для создания нашего собственного образа с помощью Dockerfile.

Теперь наш Dockerfile готов. Теперь мы создадим свой собственный образ. Это называется сборка.

Теперь мы запустим этот образ, чтобы он автоматически запускал нашу службу Jenkins в контейнере. Мы используем команду:

docker run -it — привилегированный -p 8089:8080 -v /;/base_os — имя startjenkins hw:v1

Здесь мы также можем использовать опцию -d для запуска в фоновом режиме. Итак, чтобы мы могли запускать дальнейшие команды. -это для интерактивного терминала, — привилегированный — для предоставления разрешения на доступ к внешнему миру из докера, —p — для похлопывания, если мы хотим запускать наш Jenkins из внешнего мира, т.е. из наших окон. Это означает, что мы должны запросить IP нашей базовой операционной системы.

Мы получим доступ к серверу Jenkins извне. Это называется туннелированием. Здесь мы будем использовать ngrok. Скачиваем ngrok и разархивируем.

Теперь мы можем использовать команду ./ngrok http 192.168..:8089 и использовать наш jenkins из chrome, который установлен в нашей системе Windows. 8089 — это номер порта, на котором я запускаю свой jenkins. А до этого IP нашей системы redhat.

Теперь перейдем к заданиям: теперь нам нужно создать 4 задания, а затем мы создадим цепочку заданий job1, job2, job3 и job4, используя плагин конвейера сборки.

Для первой работы нам понадобится gitbash, через который мы добавляем некоторые файлы в нашу учетную запись github:

job1: он будет автоматически извлекать репозиторий github, когда какой-либо разработчик отправляет репозиторий на Github. Означает, что он будет получать данные из github. Таким образом, когда разработчик фиксирует какие-либо изменения, это задание должно запускаться. Поэтому я использовал здесь Poll SCM, который будет отслеживать github каждую минуту. Наша работа1 будет выглядеть так:

Теперь наша следующая работа — job2. Просматривая код или программный файл, Jenkins должен автоматически запустить контейнер установки соответствующего языкового интерпретатора для развертывания кода (например, если код написан на PHP, то Jenkins должен запустить контейнер с уже установленным PHP). Здесь я использую два типа интерпретаторов — HTML и PHP. Для этого нам потребуются два разных изображения HTML и PHP. Я создал их обоих, используя два разных файла Dockerfile, которые находятся в двух разных папках.

Теперь я создал изображения html и php:

Итак, теперь наша работа2:

В исполняемой оболочке я написал код для 3 типов:

1. Когда существует только папка HTML-

2. Если существует какой-либо HTML или PHP:

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

#если оба сервера найдены

если лс | grep html && ls | grep php

тогда

если докер PS | grep html_product && docker ps | grep php_product

тогда

echo "Уже запущены оба"

Элиф докер PS -a | grep html_product && docker ps -a | grep php_product

тогда

sudo docker запустить php_product

sudo docker запустить html_product

echo "php_product и html_product запущены"

еще

sudo docker run -dti — имя html_product -v /fetched_folder:/var/www/html -p 7082:80 html:v1

sudo docker run -dti — имя php_product -v /fetched_folder:/var/www/html -p 7083:80 php:v1

echo "php_product и html_product запущены"

fi

Теперь наша работа3. Эта работа проверит наше приложение, работает оно или нет.

Теперь, наша последняя работа в цепочке. Это задание4. Если наше приложение не работает, мы должны отправить электронное письмо разработчику с сообщением об ошибке. Для этого я написал код, используя скрипт Python.

Если наше приложение не удалось, разработчик получит письмо по электронной почте.

Итак, наш трубопровод готов.

После этого идет наша последняя работа, job5. Эта работа будет контролировать наш контейнер. Если контейнер, в котором запущено приложение. происходит сбой по какой-либо причине, то это задание должно снова автоматически запускать контейнер. Каждую минуту он будет проверять наличие образа контейнера, если нет, он снова запустит контейнер.

Это было все о моем проекте по автоматизации.

Спасибо