This sample Python REST API application was written for a tutorial on implementing Continuous Integration and Delivery pipelines.
It demonstrates how to:
- Write a basic REST API using the Flask microframework
- Basic database operations and migrations using the Flask wrappers around Alembic and SQLAlchemy
- Write automated unit tests with unittest
Also:
- How to use GitHub Actions
Related article: https://medium.com/rockedscience/docker-ci-cd-pipeline-with-github-actions-6d4cd1731030
Python 3.8
Pip
virtualenv
, orconda
, orminiconda
The psycopg2
package does require libpq-dev
and gcc
.
To install them (with apt
), run:
$ sudo apt-get install libpq-dev gcc
With virtualenv
:
$ python -m venv venv
$ source venv/bin/activate
$ pip install -r requirements.txt
With conda
or miniconda
:
$ conda env create -n ci-cd-tutorial-sample-app python=3.8
$ source activate ci-cd-tutorial-sample-app
$ pip install -r requirements.txt
Optional: set the DATABASE_URL
environment variable to a valid SQLAlchemy connection string. Otherwise, a local SQLite database will be created.
Initalize and seed the database:
$ flask db upgrade
$ python seed.py
Run:
$ python -m unittest discover
Run the application using the built-in Flask server:
$ flask run
Run the application using gunicorn
:
$ pip install -r requirements-server.txt
$ gunicorn app:app
To set the listening address and port, run:
$ gunicorn app:app -b 0.0.0.0:8000
Run:
$ docker build -t ci-cd-tutorial-sample-app:latest .
$ docker run -d -p 8000:8000 ci-cd-tutorial-sample-app:latest
Run:
$ heroku create
$ git push heroku master
$ heroku run flask db upgrade
$ heroku run python seed.py
$ heroku open
or use the automated deploy feature:
For more information about using Python on Heroku, see these Dev Center articles: