В качестве результата отправьте ответы на вопросы в личном кабинете студента на сайте netology.ru.
ДЗ будет представлять собой лабораторные работы, в которых вы по инструкциям выполните определённые шаги.
- Docker и docker-compose.
- Утилита wget или браузер для загрузки архива.
- Git (по желанию, для клонирования репозитория).
- Браузер для работы с веб-интерфейсом SonarQube.
Для выполнения задания требуется устройство, способное запускать Docker-контейнеры. Поддерживаются:
- Windows 10/11 (x64) с установленным Docker Desktop.
- Linux (x64) с установленным Docker Engine и docker-compose.
- MacBook (Intel) с Docker Desktop.
- MacBook (Apple Silicon / M1/M2/M3) — возможно выполнение, но требуется настройка совместимости. См. инструкции ниже.
На Mac с процессорами Apple Silicon (M1/M2/M3) возможны проблемы при сборке или запуске контейнеров SonarQube, так как официальный образ не поддерживает архитектуру arm64. В этом случае:
- Используйте эмуляцию через platform: linux/amd64 в docker-compose.
- Или воспользуйтесь инструкцией.
На лекции мы с вами говорили, что исходный код приложения — это источник потенциальных уязвимостей.
Конечно же, исходный код приложения можно проверить и глазами, но при современных объёмах кода — это достаточно трудоемкая задача.
Поэтому существуют специальные инструменты, которые позволяют анализировать качество кода, в том числе пытаются найти в нём уязвимости.
С одним из подобных инструментов (SonarQube) мы познакомимся в этом ДЗ, альтернативы рассмотрим на одной из следующих лекций.
Важно: вам не нужно учить Java и детально разбираться в коде. Ваши задачи:
- Получить базовый опыт работы с инструментом.
- Проанализировать предупреждения, баги и уязвимости.
Мы подготовили для вас учебный проект, написанный на языке Java и использующий систему сборки Maven.
Проект представляет собой веб-сервер, работающий на порту 8080 и отвечающий HTTP-запросам.
Страница http://localhost:8080/users.html закрыта логином и паролем admin/secret.
Чтобы собрать образ и запустить его (это необязательно для выполнения ДЗ), вам нужно:
- Скачать app.tgz.
- Скачать Dockerfile.
- Скачать docker-compose.yml.
- В каталоге со скачанными файлами выполнить:
docker-compose up --build ibdev.
0. Скопируйте на целевую машину файл docker-compose.yml и откройте терминал в том же каталоге.
1. Запустите сервис SonarQube:
docker-compose up sonarqubeКоманда позволяет запустить только этот сервис и те, от которых он зависит (а не все перечисленные в docker-compose.yml).
2. Дождитесь появления в логах записи SonarQube is up, после чего зайдите на http://localhost:9000 (или docker-machine ip и порт 9000).
3. Для входа используйте следующие учётные данные:
- логин —
admin - пароль —
admin
4. На главной странице нажмите кнопку Create new project:
5. Введите ключ проекта (это нечто вроде кода проекта) и нажмите кнопку Setup:
6. Введите имя токена (ключа доступа) и нажмите на кнопку Generate:
7. После генерации токена нажмите на кнопку Continue:
8. Выберите опцию Maven и скопируйте сгенерированный код:
Необходимо скопировать вот этот код:
mvn sonar:sonar \
-Dsonar.projectKey=ru.netology:ibdev \
-Dsonar.host.url=http://ip172-18-0-13-c02u36plo55000cqjg9g-9000.direct.labs.play-with-docker.com \
-Dsonar.login=2a820a891192340e52fbfb011c706ec798b03c76
И заменить в нём строку: -Dsonar.host.url=http://ip172-18-0-13-c02u36plo55000cqjg9g-9000.direct.labs.play-with-docker.com \ на -Dsonar.host.url=http://sonarqube:9000 \.
Т. е. должно получиться:
mvn sonar:sonar \
-Dsonar.projectKey=ru.netology:ibdev \
-Dsonar.host.url=http://sonarqube:9000 \
-Dsonar.login=2a820a891192340e52fbfb011c706ec798b03c76
Это сделано потому, что контейнер с SonarQube и Maven будут находиться в одной сети, созданной для них Docker Compose, в которой сетевой доступ к сервисам возможно осуществлять по их имени.
Q: что делает эта команда?
A: большинство систем сборки (мы используем Maven) расширяемы за счёт использования плагинов (специальных дополнений). В этом случае SonarQube предоставляет для Maven Plugin, который называется sonar, и его задача — интегрируясь в Maven, проанализировать проект и отправить результаты анализа в SonarQube.
Важно: это команда для sh. Т. е. вы можете её использовать в sh, bash, Cygwin Terminal. Если вы работаете в CMD или PowerShell, то уберите все \ и переносы строки и пишите всё в одну строку.
9. Откройте новый терминал в том же каталоге, где у вас расположен файл docker-compose.yml.
10. Выполните следующие команды:
# скачиваем архив с приложением
wget https://raw.githubusercontent.com/netology-code/ibdev-homeworks/master/02_dev/assets/app.tgz
# распаковываем архив
tar -xvf app.tgz11. Запустите контейнер со сборочной системой Maven:
docker-compose run maven mvn -f /app sonar:sonar \
-Dsonar.projectKey=ru.netology:ibdev \
-Dsonar.host.url=http://sonarqube:9000 \
-Dsonar.login=2a820a891192340e52fbfb011c706ec798b03c76Обратите внимание: начиная с sonar:sonar - это то, что вы скопировали на шаге 8, с тем изменением, что после mvn добавлена опция -f /app.
12. Дождитесь появления сообщения об окончании процесса:
13. Перейдите в веб-интерфейс SonarQube:
14. Перейдите в раздел Bugs (ошибки в программном коде):
В этом разделе для каждой записи вы можете:
- Изменить тип: Bug, Vulnerability, Code Smell.
- Установить приоритет: Blocker — блокирует всю работу над продуктом, Critical — критичный, Major — важный, Minor — неважный, Info — информационное сообщение.
- Статус: Open — открыт, Resolve as fixed — «закрыть» как исправлено, Resolve as false positive — «закрыть» как ложное срабатывание, Resolve as won't fix — «закрыть» как непланируемое к исправлению.
- Увидеть примерную оценку по времени на исправление.
- Установить комментарий.
15. Перейдите в раздел Vulnerabilities (уязвимости в программном коде):
В этом разделе для каждой записи вы можете:
- Изменить тип: Bug, Vulnerability, Code Smell.
- Установить приоритет: Blocker — блокирует всю работу над продуктом, Critical — критичный, Major — важный, Minor — неважный, Info — информационное сообщение.
- Статус: Open — открыт, Resolve as fixed — «закрыть» как исправлено, Resolve as false positive — «закрыть» как ложное срабатывание, Resolve as won't fix — «закрыть» как непланируемое к исправлению.
- Увидеть примерную оценку по времени на исправление.
- Установить комментарий.
16. Перейдите в раздел Security Hotspots (код, требующий ручного анализа на предмет наличия уязвимости):
В этом разделе для каждой записи вы можете:
- Выставить статус.
- Назначить ответственного.
17. Перейдите в раздел Code Smells (запахи кода — признаки плохого кода):
В этом разделе для каждой записи вы можете:
- Изменить тип: Bug, Vulnerability, Code Smell.
- Установить приоритет: Blocker — блокирует всю работу над продуктом, Critical — критичный, Major — важный, Minor — неважный, Info — информационное сообщение).
- Статус: Open — открыт, Resolve as fixed — «закрыть» как исправлено, Resolve as false positive — «закрыть» как ложное срабатывание, Resolve as won't fix — «закрыть» как непланируемое к исправлению.
- Увидеть примерную оценку по времени на исправление.
- Установить комментарий.
Отправьте в личном кабинете студента ответы на следующие вопросы:
- Какие баги были выявлены: количество, описание, почему SonarQube их считает багами? См. ссылку
Why is this an issue?. - Какие уязвимости были выявлены: количество, категории, описание, почему SonarQube их считает уязвимостями?
- Какие Security Hotspots были выявлены: количество, категории, приоритет, описание, почему SonarQube их считает Security HotSpot'ами?
- К каким CWE идёт отсылка для Security Hotspots из п. 2? См. вкладку
How can you fix it?в нижней части страницы. - Какие запахи кода были выявлены: количество, описание, почему SonarQube их считает запахами кода? См. ссылку
Why is this an issue?.










