Создадим простейшее приложение на питоне
Программа будет возвращать строку "Hello World" по http
Будет происходить тест на идентичность отданной строки
Если тест удачен - происходит деплой
Автоматика на gitlab
Т.е. по факту простейший CI CD процесс
Подготовка
Предполагается:
Установлен и зарегистрирован gitlab-runner для проекта
Раннер зарегистрирован и исполняет нетегированные джобы
В противном случае - создайте раннер через:
- Settings - CICD - Runners
- Выключить: Enable instance runners for this project
- New project runner - Run untagged jobs - Linux
Запуск раннера на сервере:
docker run -d --name gitlab-runner --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:alpine
Регистрация раннера (токен берете на странице создания раннера CI/CD Settings):
docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:alpine register
Выше:
- Указать свой URL (CI/CD Settings)
- Ввести выдданый при создании раннера на странице токен (CI/CD Settings)
- Имя - опционал или не менять
- Executor - docker
- Default docker image - docker:dind
Заменяем в конфиге /srv/gitlab-runner/config/config.toml:
volumes = ["/cache"] на volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
Проверяем на вкладке (CI/CD Settings) - View Runners
Файлы проекта
# cat main.py
# cat test_app.py
# cat requirements.txt
# cat Dockerfile
# cat docker-compose.yml
# cat .gitlab-ci.yml
Про тесты
Работа pytest test_app.py заключается в следующем:
Создаётся основная функция для тестирования и тестовая функция, имя которой начинается с «test».
Для запуска теста в командной строке пишется команда «pytest».
Модуль pytest обнаруживает выражение «test» и выполняет соответствующую функцию.
Затем pytest ищет команду assert внутри тестовой функции и вычисляет логическое выражение, написанное рядом с ней.
Если результат вычисления равен True, то тестовая функция проходит, если нет — терпит неудачу.
Для запуска файла test_app.py можно использовать команду pytest test_app.py.
Параметры команды pytest:
-s Позволяет печатать операторы или любой другой вывод, который обычно печатается в stdout, во время выполнения тестов.
-v Запускает модуль в полном режиме и выводит подробную информацию о пройденном тесте.
Если в файле main.py - return {"msg": "Hello World"} будет отличаться от assert response.json() == {"msg": "Hello World"}
Джоба test в пайплайне будет провалена
Комментарии пользователей
Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!