docker: add test setup

jenkins
Christian Merten 3 years ago
parent 75e989a056
commit 4e3eb7dd5e
Signed by: christian.merten
GPG Key ID: D953D69721B948B3

@ -113,7 +113,9 @@ jdav_web/celerybeat-schedule.db
# docker development database folder # docker development database folder
docker/development/db docker/development/db
docker/test/db
# docker dev and production media folders # docker dev and production media folders
docker/development/media docker/development/media
docker/production/media docker/production/media
docker/test/media

3
.gitignore vendored

@ -114,10 +114,13 @@ jdav_web/celerybeat-schedule.db
# docker environment variables # docker environment variables
docker.env docker.env
!docker/test/docker.env
# docker development database folder # docker development database folder
docker/development/db docker/development/db
docker/test/db
# docker dev and production media folders # docker dev and production media folders
docker/development/media docker/development/media
docker/production/media docker/production/media
docker/test/media

@ -0,0 +1,29 @@
FROM python:3.9-bullseye
# install additional dependencies
RUN apt-get update && apt-get install -y gettext texlive texlive-fonts-extra
# create user
RUN groupadd -g 501 app && useradd -g 501 -u 501 -m -d /app app
# create static directory and set permissions, when doing this before mounting a named volume
# in docker-compose.yaml, the permissions are inherited during the mount.
RUN mkdir -p /var/www/jdav_web/static && chown -R app:app /var/www/jdav_web/static
# create static directory and set permissions, when doing this before mounting a named volume
# in docker-compose.yaml, the permissions are inherited during the mount.
RUN mkdir -p /tmp/uwsgi && chown -R app:app /tmp/uwsgi
WORKDIR /app
USER app
# add .local/bin to PATH
ENV PATH="/app/.local/bin:$PATH"
# install requirements
COPY --chown=app:app ./requirements.txt /app/requirements.txt
# we install uwsgi here to check if packages dependencies are resolved, but we don't actually
# need uwsgi in test
RUN pip install coverage uwsgi -r requirements.txt
COPY --chown=app:app . /app

@ -0,0 +1,30 @@
version: "3.9"
services:
master:
image: kompass:test
build:
context: ./../../
dockerfile: docker/test/Dockerfile
env_file: docker.env
depends_on:
- redis
- cache
- db
entrypoint: /app/docker/test/entrypoint-master.sh
cache:
restart: always
image: memcached:alpine
redis:
restart: always
image: redis:6-alpine
db:
restart: always
image: mariadb
volumes:
- ./db:/var/lib/mysql
- ./provision/mysql/init:/docker-entrypoint-initdb.d
env_file: docker.env

@ -0,0 +1,28 @@
DJANGO_ALLOWED_HOST='*'
DJANGO_BASE_URL='localhost:8000'
DJANGO_PROTOCOL='http'
EMAIL_HOST='localhost'
EMAIL_HOST_USER='test'
EMAIL_HOST_PASSWORD='password'
EMAIL_SENDING_ADDRESS='test@localhost'
DJANGO_DEPLOY=1
DJANGO_DEBUG=1
DJANGO_DATABASE_NAME='kompass'
DJANGO_DATABASE_USER='kompass'
DJANGO_DATABASE_PASSWORD='password'
DJANGO_DATABASE_HOST='db'
DJANGO_DATABASE_PORT=3306
MYSQL_ROOT_PASSWORD='secretpassword'
MYSQL_PASSWORD='password'
MYSQL_USER='kompass'
MYSQL_DATABASE='kompass'
DJANGO_SETTINGS_MODULE='jdav_web.settings'
DJANGO_STATIC_ROOT='/var/www/jdav_web/assets'
MEMCACHED_URL='cache:11211'
BROKER_URL='redis://redis:6379/0'

@ -0,0 +1,41 @@
#!/usr/bin/env bash
set -o errexit
mysql_ready() {
cd /app/jdav_web
python << END
import sys
from django.db import connections
from django.db.utils import OperationalError
db_conn = connections['default']
try:
c = db_conn.cursor()
except OperationalError:
sys.exit(-1)
else:
sys.exit(0)
END
}
until mysql_ready; do
>&2 echo 'Waiting for MySQL to become available...'
sleep 1
done
>&2 echo 'MySQL is available'
cd /app
if ! [ -f /tmp/completed_initial_run ]; then
echo 'Initialising kompass master container'
python jdav_web/manage.py compilemessages --locale de
fi
cd jdav_web
coverage run manage.py test startpage finance members -v 2

@ -0,0 +1 @@
GRANT ALL PRIVILEGES ON test_kompass.* TO 'kompass'@'%';
Loading…
Cancel
Save