
Болтушкин, Маркушин, Туранов, 712-2, лабораторная 5
.docxМинистерство науки и высшего образования Российской Федерации
Федеральное государственное автономное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОННИКИ (ТУСУР)
Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)
ПОДКЛЮЧЕНИЕ К ВИРТУАЛЬНЫМ МАШИНАМ. РАБОТА С DOCKER. РАЗВЕРТЫВАНИЕ ВЕБ-ПРИЛОЖЕНИЯ НА СЕРВЕРЕ. НАСТРОЙКА JENKINS.
Отчет по лабораторной работе №5
по дисциплине «Технологии и методы программирования»
Студенты гр. 712-2: ___________ Л.С. Болтушкин
___________ В.Д. Маркушин
___________ А.В. Туранов __.__.2024
Руководитель Младший научный сотрудник кафедры КИБЭВС
_______ __________ Б.С. Лодонова
__.__.2024
Томск 2024
Введение
Целью данной лабораторной работы является изучение работы с Docker, ознакомление с сервером автоматизации Jenkins, сделать пайплан, разворачивающий приложение на сервере.
1 Ход работы
Для начала работы была установлена виртуальная машина Oracle Virtual Box и импортирован образ Jenkins (рисунок 1.1).
Рисунок 1.1 – Создание виртуальной машины
Настроим сетевой адаптер для лучшей работы далее (рисунок 1.2).
Рисунок 1.2 – Сетевой адаптер
Далее производим вход в систему (рисунок 1.3).
Рисунок 1.3 – Вход в систему Jenkins
Для удобной работы далее и объеденного буфера обмена мы узнаем IP-адрес через команду ifconfig (рисунок 1.4).
Рисунок 1.4 – IP-адрес
Вход в Jenkins через Windows Power Shell был успешно произведен, и теперь вся работа будет продолжена там (рисунок 1.5).
Рисунок 1.5 – Вход в Jenkins через Windows Power Shell
Первым делом нужно обновить и установить необходимые пакеты командами «sudo apt update» (рисунок 1.6).
Рисунок 1.6 – Обновление пакетов
С помощью команды «sudo apt install apt-transport-https ca-certificates curl software-properties-common -y» устанавливаем пакеты, которые позволяют APT использовать пакеты через HTTPS (рисунок 1.7).
Рисунок 1.7 – Установка пакета
Далее были введены следующие команды, показывающие на рисунке 1.8 для установки Docker.
Рисунок 1.8 – Подготовка к установке Docker
Далее необходимо установить сам Docker командой «sudo apt install docker.io». В процессе установки, необходимо согласиться занять дисковое пространство (рисунок 1.9).
Рисунок 1.9 – Установка Docker
Проверим установился ли Docker с помощью команды «docker –version» (рисунок 1.10).
Рисунок 1.11 – Успешная установка Docker
С помощью команды «sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose- $(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose» мы установим Docker-compose, который позволяет управлять несколькими контейнерами с сервисами (рисунок 1.12).
Рисунок 1.12 – Установка Docker-compose
Для того, чтобы программа могла выполняться, нужно дать разрешение на выполнение командой «sudo chmod +x /usr/local/bin/docker-compose» и проверить установку Docker-compose можно командой «docker-compose -- version» (рисунок 1.13).
Рисунок 1.13 – Разрешение на выполнение
Далее необходимо установить Java, а именно Java Runtime Environment и Java Development Kit, командами: «sudo apt install default-jre» и «sudo apt install default-jdk». В процессе установки, необходимо согласиться занять дисковое пространство: ввести «Д» и нажать «Enter». (рисунок 1.14 и 1.15).
Рисунок 1.14 – Команда «sudo apt install default-jre»
Рисунок 1.15 – Команда «sudo apt install default-jdk»
После установки всех необходимых пакетов необходимо сделать так, чтобы при запуске команд Docker не пришлось каждый раз использовать права суперпользователя. Для этого нужно воспользоваться командами «sudo usermod -aG docker ${USER}», «su - ${USER}» и ввести пароль от учетной записи (рисунок 1.16).
Рисунок 1.16 – Права суперпользователя
После завершения подготовки к работе с Docker, необходимо в своем аккаунте на GitHub создать публичный репозиторий и скопировать в него содержимое репозитория https://github.com/DS0303/sudoku (рисунок 1.17).
Рисунок 1.17 – Импорт репозитория
Доступ к личному репозиторию нужно настроить по SSH-ключу. Для этого нужно сгенерировать пару ключей с помощью команды «ssh-keygen -t ed25519 -C «почта привязанная к GitHub»». Все настройки можно оставить по умолчанию, то есть пустыми, и просто нажимать «Enter» (рисунок 1.18).
Рисунок 1.18 – Генерация SSH-ключа
Создание ssh ключа на GitHub показано на рисунке 1.19.
Рисунок 1.19 – Создание SSH Key в GitHub
Далее копируем SSH для выполнения дальнейшей работы (рисунок 1.20).
Рисунок 1.20 – Local SSH
После добавление SSH ключа необходимо создать директорию командой «mkdir app», перейти в нее «cd app/» и клонировать туда свой репозиторий «git clone «ссылка на ваш репозиторий»». Результат можно посмотреть командой «ls» (рисунок 1.21).
Рисунок 1.21 – Создание директория
Затем необходимо зарегистрироваться на Docker Hub https://hub.docker.com/ (рисунок 1.22).
Рисунок 1.22 – Регистрация на Docker Hub
Затем происходит авторизация с помощью команды «docker login -u «логин Docker Hub»» (рисунок 1.23).
Рисунок 1.23 – Авторизация в Docker Hub
Затем необходимо перейти в клонированный репозиторий командой «cd «название репозитория»» и создать там Dockerfile «echo -e "FROM mhart/alpine-node\nWORKDIR /app\nCOPY package*.json ./\nRUN npm install\nCOPY . .\nEXPOSE 3000\nCMD [\"node\", \"app.js\"]" > Dockerfile». Данный Dockerfile создает контейнер, который будет содержать и запускать Node.js приложение, находящееся в файле app.js, и будет доступен на порту 3000. Посмотреть созданный Dockerfile можно командой «cat Dockerfile» (рисунок 1.24).
Рисунок 1.24 – Dockerfile
Все созданные контейнеры можно посмотреть командой «docker images». Если образ успешно собран, его необходимо отправить в свой репозиторий Docker Hub «docker push «логин Docker Hub/репозиторий:тег»» (рисунок 1.25).
Рисунок 1.25 – Контейнеры
Зайдем на сайт DockerHub, обновим страницу и проверим добавление проекта (рисунок 1.26).
Рисунок 1.26 – Появление репозитория
Для того, чтобы управлять образами, необходимо создать в репозитории файл (рисунок 1.27).
Рисунок 1.27 – Управление образами
Таким образом, приложение будет доступно через порт 80 на хосте, и любые изменения в локальных файлах будут автоматически отражаться внутри контейнера (рисунок 1.28).
Рисунок 1.28 – docker-compose.yml приложения
Если контейнер успешно запущен, можно проверить его работоспособность. Для этого в браузере необходимо перейти по адресу, указанному в списке контейнеров в пункте PORTS, иными словами IP-адрес, в нашем случае 172.20.10.11 (рисунок 1.29).
Рисунок 1.29 – Проверка приложения
После запуска контейнера с приложением необходимо развернуть сервис Jenkins. Для этого необходимо создать директорию для файла dockercompose.yml и написать сам файл, который собирает Jenkins в контейнере: «cd», «mkdir -p ~/jenkins_home», «cd ~/jenkins_home», «echo dockercompose.yml», «nano docker-compose.yml» (рисунок 1.30).
Рисунок 1.30 – Запуск Jenkins
Далее создаем файл в GNU nano (рисунок 1.31).
Рисунок 1.31 – docker-compose.yml для Jenkins
Откроется страница, которая требует пароль, чтобы убедится, что сервис включен администратором. Необходимый пароль хранится локально и получить его можно командой «docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword» (рисунок 1.32).
Рисунок 1.32 – Получение пароля
На рисунке 1.33 можно увидеть, что вход в Jenkins был выполнен успешно.
Рисунок 1.33 – Вход в Jenkins
Далее необходимо создать агента. Но перед этим необходимо создать для него директорию командой «sudo mkdir -p /home/jenkins_agent». Затем командами «sudo chown $(whoami):$(whoami) /home/jenkins_agent», «sudo chmod 777 /home/jenkins_agent» установить права доступа на директорию /home/jenkins_agent, разрешая всем пользователям читать, записывать и выполнять файлы в этой директории. Командой «cd /home/jenkins_agent» перейти в созданную директорию (рисунок 1.34).
Рисунок 1.34 – Создание агента
Затем в веб-интерфейсе Jenkins необходимо создать новый узел. В качестве названия можно установить любое и установить тип «Постоянный агент». (рисунок 1.35).
Рисунок 1.35 – Создание нового узла
После нажатия кнопки «Создать» откроется настройка агента. Необходимо указать описание, количество процессов-исполнителей, удаленную корневую директорию, которая была создана до этого. Метку можно поставить любую, они используются, чтобы указать, на каком агенте или группе агентов должна выполняться конкретная задача. Остальные настройки поставить как на скриншотах (рисунки 1.36 и 1.37).
Рисунок 1.36 – Настройка агента
Рисунок 1.37 – Продолжение настройки агента
После создания агента он будет не подключен (рисунок 1.38).
Рисунок 1.38 – Созданный агент
Чтобы подключить агента необходимо сначала выполнить в терминале только первую curl команду, которая устанавливает agent.jar (рисунок 1.39 и 1.40).
Рисунок 1.39 – Данные для подключения
Рисунок 1.40 – Подключение агента
Чтобы проверить включился ли агент достаточно просто обновить страницу в браузере (рисунок 1.41).
Рисунок 1.41 – Узел agent подключен
Чтобы создать новую задачу, нужно выбрать на Dashboard «Новый Item» (рисунок 1.42).
Рисунок 1.42 – Создание нового Item
В шагах сборки указываем «Выполнить команду shell» и прописываем некую команду (рисунок 1.43).
Рисунок 1.43 – Шаг сборки
Далее проверим вывод на консоль (рисунок 1.44).
Рисунок 1.44 – Вывод на консоль
По завершении сборки должен создаться файл hello.txt. Вывести его содержимое можно командой «cat /home/jenkins_agent/workspace/helloworld/hello.txt» (рисунок 1.45).
Рисунок 1.45 – Проверка создания файла
Затем создадим декларативный пайплайн, название выбираем любое и выбираем тип «Pipeline», затем прописываем сам скрипт (рисунок 1.46).
Рисунок 1.46 – Написание пайплана
На рисунке 1.47 можно ознакомится с успешным выполнением каждого этапа у пайплана.
Рисунок 1.47 – Пройденный пайплан
Пайплайн может быть написан не только через web-интерфейс Jenkins, но и загружен из файла Jenkinsfile, который может быть расположен в git- репозитории (рисунки 1.48 и 1.49).
Рисунок 1.48 – Jenkisfile в GitHub
Рисунок 1.49 – Выбор источника
И на рисунке 1.50 можем увидеть, что через загрузку с GitHub пайплан также успешно проходит все стадии.
Рисунок 1.50 – Пройденный пайплан
Jenkins может быть подключен к системе Docker, для этого необходимо добавить учетные данные от DockerHub (рисунок 1.51).
Рисунок 1.51 – Добавление учетных данных DockerHub в Jenkins
Помимо этого, потребуется скачать соответствующий плагин (рисунок 1.52).
Рисунок 1.52 – Менеджер плагинов Jenkins
После установки плагина и добавления учетных данных DockerHub Jenkins может быть использован для развертывания Docker-контейнеров. Для этого необходимо переписать ранее созданный Jenkisfile и создать новую задачу (рисунок 1.53).
Рисунок 1.53 – Обновленный Jenkisfile
На рисунке 1.54 представлен результат выполнения обновленной задачи в Jenkins.
Рисунок 1.54 – Пройденный пайплан
На рисунке 1.55 можно увидеть развернутое приложение, которое мы видели ранее.
Рисунок 1.55 – Работающее приложение
Заключение
В ходе выполнения данной лабораторной работы были получены навыки работы с Docker, сервером автоматизации Jenkins и был созданный пайплан, разворачивающий приложение на сервере.