courses:devops:project

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
courses:devops:project [2022/02/16 13:20]
mark
courses:devops:project [2024/02/20 16:33]
korytov.pavel
Line 10: Line 10:
   * Не использовать Expose   * Не использовать Expose
   * При установке любых пакетов и программ (в том числе в requirements) ВСЕГДА указывать версии   * При установке любых пакетов и программ (в том числе в requirements) ВСЕГДА указывать версии
 +  * Ограничить установку зависимостей apt одной строкой (один RUN)
 +  * Если настройка одной части приложения состоит из нескольких команд -> необходимо разместить их в одном слое (в одном RUN)
 +
  
 Docker-compose:​ Docker-compose:​
Line 16: Line 19:
   * Не использовать тип сети HOST   * Не использовать тип сети HOST
   * Не отрывать лишних (непредусмотренных заданием) портов   * Не отрывать лишних (непредусмотренных заданием) портов
 +  * Не использовать порты хост-машины <=1024
  
 ===== Варианты заданий ===== ===== Варианты заданий =====
Line 30: Line 34:
     * Проверка на соответствие стилю кодирования / бьютификакция - подключаем проверку стиля кодирования (технологии ниже) и встраиваем ее в цепочку запуска     * Проверка на соответствие стилю кодирования / бьютификакция - подключаем проверку стиля кодирования (технологии ниже) и встраиваем ее в цепочку запуска
       * Проверка на pep8 - используем https://​pypi.org/​project/​pep8/​       * Проверка на pep8 - используем https://​pypi.org/​project/​pep8/​
-      * Приведение ​к pep8 - https://pypi.org/project/autopep8/+      * Форматирование Python (yapf) - https://​github.com/​google/​yapf 
 +      * Форматирование Python (black) - https://​github.com/​psf/​black 
 +      * Форматирование ​Python (flake8) ​- https://github.com/​PyCQA/​flake8 
 +      * Форматирование HTML, JS (prettier) - https://​prettier.io 
 +      * Форматирование Python (pindent) - http://​svn.python.org/projects/​python/​trunk/​Tools/​scripts/​pindent.py 
 +      * Форматирование Python (pybetter) - https://​github.com/​lensvol/​pybetter 
 +      * Форматирование Python (ssort) - https://​github.com/​bwhmather/​ssort 
 +      * Форматинование Pyhton (usort) - https://​github.com/facebook/usort
       * Проверка бьютификатором для HTML - https://​pypi.org/​project/​html-linter/​       * Проверка бьютификатором для HTML - https://​pypi.org/​project/​html-linter/​
       * Причесывание бьютификатором HTML - https://​pypi.org/​project/​css-html-prettify/​       * Причесывание бьютификатором HTML - https://​pypi.org/​project/​css-html-prettify/​
Line 41: Line 52:
       * Проверка на заголовки       * Проверка на заголовки
       * Проверка на загрузку файла       * Проверка на загрузку файла
-    * Selenium - пишем selenium тесты и встраиваем их в цепочку запуска +    * Selenium - пишем selenium тесты и встраиваем их в цепочку запуска ​(нельзя ​использовать для selenium ​отдельный контейнерреализуйте тесты в рамах контейнера tester) 
-      * **Заполнение формы** - тест на заполнение формы и проверка ответа сервера +      ​Система для тестирования (ИС ИОТ) - https://​dev.digital.etu.ru/​trajectories-test/​ 
-      * **Правка html кода страницы** - вносим свои изменения в код ​страницы +      * Авторизуйтесь по своему логину/паролю в ЛК ЛЭТИ ​(укажите через ​.env-файл
-      * **Получение списка преподавателей каф. МОЭВМ** - работаем не с демо приложением, а со страницей кафедры на сайте ​ЛЭТИ. Силами selenium (через ​запуск js кода) извлекаем список +      * По сути заданий - см. лекцию 2024-03-01 
-      ​* **Поиск и обнаружение ​ошибок в консоли JS** -  +      * Пользовательская документация по ИС ИОТ: https://​digital.etu.ru/​doku.php?​id=navigation:​iot
-      ​* *олучение списка сертификатов пользователя по ссылке на профиль Stepik** - работаем не с демо приложением,​ а со stepik.org. Силами selenium (через запуск js кода) извлекаем список +
-      * **Получение списка PR в открытом github репозитории** - +
   * Docker   * Docker
-    * Внешний SSH доступ в контейнеры - организуем доступ или по ключу в каталоге с проектом,​ или генерируем пароль для доступа и сообщаем его при сборке / запуске,​ или генерируем новую пару ключе и выводим их в файлы.+    * Внешний SSH доступ в контейнеры - организуем доступ ​через протокол SSH контейнер одним из следующих способов: ​или по ключу в каталоге с проектом,​ или генерируем пароль для доступа и сообщаем его при сборке / запуске,​ или генерируем новую пару ключе и выводим их в файлы. Порт для SSH должен быть доступен снаружи docker-compose конфигурации.
       * В app - по публичному ключу (существующему)       * В app - по публичному ключу (существующему)
       * В tester - по публичному ключу (существующему)       * В tester - по публичному ключу (существующему)
Line 67: Line 76:
       * **Порт для веб-сервера** - публичный порт, на котором слушает веб-сервер       * **Порт для веб-сервера** - публичный порт, на котором слушает веб-сервер
       * **Список этапов тестирования для запуска** - список шагов из пункта "​Построение тестов",​ которые будут запущены. Если не задано,​ запускаем все этапы. Если задано - то только указанные.       * **Список этапов тестирования для запуска** - список шагов из пункта "​Построение тестов",​ которые будут запущены. Если не задано,​ запускаем все этапы. Если задано - то только указанные.
-      * **Публичный SSHключ для доступа в контейнер(ы)** - +      * **Публичный SSHключ для доступа в контейнер(ы)** - это отдельный ключ, не связанный с заданием "​Внешний SSH доступ в контейнеры"​ из предыдущего раздела.
       * **Ключ отладки для Flask** - флаг отладочной работы (debug) для Flask приложения       * **Ключ отладки для Flask** - флаг отладочной работы (debug) для Flask приложения
     * Органичения ресурсов - ограничения ресурсов для контейнеров в docker-compose.yml     * Органичения ресурсов - ограничения ресурсов для контейнеров в docker-compose.yml
       * **ОЗУ** - ограничьте доступную каждому из контейнеров ОЗУ до объема 100 + НОМЕР_ВАРИАНТА * 10 МБ       * **ОЗУ** - ограничьте доступную каждому из контейнеров ОЗУ до объема 100 + НОМЕР_ВАРИАНТА * 10 МБ
-      * **Ядра процессора** - ограничьте доступные в каждом контейнере количество ядер ЦПУ до НОМЕР_ВАРИАНТА % 2 (остаток от деления номера вашего варианта на два)+      * **Ядра процессора** - ограничьте доступные в каждом контейнере количество ядер ЦПУ до (1 + НОМЕР_ВАРИАНТА % 2(остаток от деления номера вашего варианта на два)
       * **Максимальное Количество процессов** - ограничьте до количества НОМЕР_ВАРИАНТА       * **Максимальное Количество процессов** - ограничьте до количества НОМЕР_ВАРИАНТА
  
 ==== Варианты средней сложности ==== ==== Варианты средней сложности ====
    
-Вам необходимо реализовать docker-compose конфигурацию из двух узлов:+Вам необходимо реализовать docker-compose конфигурацию из двух узлов ​(не больше и не меньше):
   * app - контейнер с существующим демонстрационным веб-приложением (https://​github.com/​moevm/​devops-examples/​tree/​main/​EXAMPLE_APP). ​   * app - контейнер с существующим демонстрационным веб-приложением (https://​github.com/​moevm/​devops-examples/​tree/​main/​EXAMPLE_APP). ​
     * Устанавливать приложение необходимо скачивая репозиторий https://​github.com/​moevm/​devops-examples и копируя файлы из него при сборке вашего контейнера:​)     * Устанавливать приложение необходимо скачивая репозиторий https://​github.com/​moevm/​devops-examples и копируя файлы из него при сборке вашего контейнера:​)
     * Чтобы все заработало,​ вам придется потратить время и поразбираться - из коробки может не работать. ​     * Чтобы все заработало,​ вам придется потратить время и поразбираться - из коробки может не работать. ​
-  ​* tester - контейнер для запуска тестов (состав и особенности тестов задаются в таблице вариантов)+    * Возможно,​ вам для выполнения заданий потребуются фиксы в исходник - делайте для них патчи ( https://​man7.org/​linux/​man-pages/​man1/​patch.1.html) 
 +    * Корнем дерева процессов выступает запущенное веб-приложение 
 +  ​* tester - контейнер для запуска ​**всех** ​тестов (состав и особенности тестов задаются в таблице вариантов) 
 +    * Корнем дерева процессов выступает стандартный python http сервер (python -m http.server 3000) 
 +    * Этот сервер должен быть запущен в каталоге контейнера,​ где будет происходить работа тестовых скриптов 
 +    * Тестовые скрипты запускаются через docker exec  
 + 
  
 Оба контейнера должны использовать написанные вами образы,​ собираемые из локальных Dockerfile. Шаблоны для имен Dockerfile: Оба контейнера должны использовать написанные вами образы,​ собираемые из локальных Dockerfile. Шаблоны для имен Dockerfile:
   * Dockerfile_app   * Dockerfile_app
   * Dockerfile_tester   * Dockerfile_tester
 +
 +Помимо Dockerfile, вам также необходимо сделать файл README.md, содержащий примеры команд для запуска тестов и проверки всей конфигурации. Это сильно ускорит проверку:​)
 +
  
 Параметры конфигурации задаются в таблице вариантов + общие требования ([[http://​se.moevm.info/​doku.php/​courses:​devops:​project#​общие_требования]]). ​ Параметры конфигурации задаются в таблице вариантов + общие требования ([[http://​se.moevm.info/​doku.php/​courses:​devops:​project#​общие_требования]]). ​
Line 91: Line 110:
 ==== Варианты высокой сложности ==== ==== Варианты высокой сложности ====
  
-Будут, но в 2023.+1. Автоматизация тестирования курсовых по Android 
 + 
 +Идея - разработать набор github actions, которые будут ​по состоянию репозитория проверять (базово) соответствие этапам выполнения работы и генерировать / отображать статус в readme.  
 + 
 +Подробности об этапах:​ 
 + 
 +https://​se.moevm.info/​doku.php/​staff:​courses:​application_development_for_mobile_platforms:​course_work:​topics 
 + 
 +Проверяем:​ 
 +  - Макет и UC (есть вики страницафайл макета загружен в репо) 
 +  - UI на заглушках (если задан нужный тег- проверяем наличие исходников андроид проекта,​ его собираемость через github actions, .gitignore , название пакета ) 
 +  - Юнит-тесты ( тег, сборка и запуск) 
 +  - App is ready (тег, требования,​ запуск,​ запуск стресстестов) 
 +  - Оценка сложности UI вашего приложения (вики станица и ее содержимое) 
 +  - Пояснительная записка (наличие файлов ) 
 +  - Интеграционные тесты ( тег, сборка и запуск) 
 + 
 +Используем в качестве технологий github actions. Сдаем отдельным репо. 
 + 
 +2. Проверка корректности учебных работ на языке Python (командная строка)  
 + 
 +Идея - автоматизировать процесс проверки лабораторных и курсовых работ.  
 + 
 +Для проверки кода - pylint, для тестирования работы в командной строке https://​github.com/​cucumber/​aruba,​ для профилирования работы - valgrind. 
 + 
 +Формат выполнения ​ github actions. Сдаем отдельным репо. 
 + 
 +Этапы проверки 
 +  * Успешная проверка на явные синтаксические проблемы через линтер(не запустится,​ нет комментов,​ невменяемые имена переменных....) 
 +  * Успешное тестирование работы на заранее известных примерах аргументов командной строки (== приложение не падает с заранее известными аргументами ) 
 +  * Стресс-тестирование аргументов командной строки (проверка,​ что если подавать почти рандомные аргументы,​ приложение не сломается. Аргументы необходимо генерировать рандомно,​ но в соответствии с описанием ожидаемой структуры ) 
 +  * Стресс-тестирование stdin 
 +  * Профилирование работы по памяти и времени ( valgrind + time) 
 + 
 +3. Проверка корректности учебных работ на языке С (командная строка)  
 + 
 +Аналогично теме 2, но компилируем в gcc (и проверяем что все ок с компиляцией) + другие линтеры. 
 + 
  
 ===== Правила оценивания ===== ===== Правила оценивания =====
Line 102: Line 159:
  
  
 +Подробно о процедуре проверки https://​docs.google.com/​document/​d/​1iqn_jtQ7yP_jgMv1a-jw3qriWTVHDyAeEPAnQT51tl8/​edit
 ===== Правила работы в репозитории ===== ===== Правила работы в репозитории =====
  
 Все работы сдаются только и исключительно в виде PR в репозиторий курса. Подробно:​ Все работы сдаются только и исключительно в виде PR в репозиторий курса. Подробно:​
  
-https://​github.com/​moevm/​devops-1h2022/​blob/​main/​README.md+https://​github.com/​moevm/​devops-1h2024/​blob/​main/​README.md 
 + 
 +===== По работе в selenium ===== 
 + 
 +Если у вас сложности:​ 
 + 
 +  * Примеры скриптов и тестов https://​github.com/​moevm/​devops-examples/​tree/​main/​selenium_tests 
 +  * Курс https://​stepik.org/​course/​575 
 +  * Старая,​ но актуальная лекция про Selenium https://​www.youtube.com/​watch?​v=gLj6BMmI69I
courses/devops/project.txt · Last modified: 2024/03/01 13:58 by korytov.pavel