====== 12. Virtualizace ====== ===== Cíle cvičení ===== - Seznámení s technologií Docker - Základní techniky testování - Sestavení projektu pro Gitlab CI/CD ===== Podklady ===== * https://docs.docker.com/ * https://gitlab.fel.cvut.cz/B232_B0B37NSI/test-cicd-flask-app * https://docs.pytest.org/en/8.2.x/ ===== Vytvoření Docker image ===== Vytvoříme jednoduchou aplikaci ve Flasku, která bude vracet renderovanou šablonu: # main.py from flask import Flask, render_template app = Flask(__name__) @app.route('/') def home(): return render_template('home.html') if __name__ == "__main__": app.run(host='0.0.0.0', port=80, debug=True) Šablona (v adresáři templates):

Hello world!

Pro přípravu Docker obrazu připravíme seznam potřebných modulů a Dockerfile, na základě se obraz vytvoří. # requirements.txt Flask==2.0.3 pytest==7.1.3 Werkzeug==2.2.2 # Dockerfile FROM python:3.8-slim-buster ADD . /code WORKDIR /code RUN pip install -r requirements.txt EXPOSE 80 CMD ["python", "main.py"] # docker-compose.yml version: '1' services: web: build: . volumes: - .:/code ports: - "80:80" Pokud je připraven předpis **docker-compose.yml**, lze využít následující příkaz: docker-compose up Pokud došlo ke změně v souborech s požadavky na sestavení, je třeba spustit docker-compose build ===== Testování ===== Pro testování využijeme modul [[https://docs.pytest.org/en/8.2.x/|pytest]], který bude třeba nejprve nainstalovat pip install pytest Test postupně spouští testy v souborech, které jsou v adresáři tests. V adresáři tests vytvořte následující soubor: # test_home_route.py from main import app def test_home_route(): """Make sure we get an expected response from home route""" response = app.test_client().get('/') assert response.status_code == 200 Test lze spustit lokálně: python -m pytest ===== CI/CD pipeline ===== stages: - test - build - deploy run_tests: stage: test image: python:3.10.8-slim-buster before_script: - pip install -r requirements.txt script: - python -m pytest