# 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