Any Python framework or tool that can run inside a Docker container will run on CloudBees CodeShip Pro. This documentation article will highlight simple configuration files for a Node-based Dockerfile with nosetest and py.test.
We have a sample Python/Django repo that you can clone or take a look at via the GitHub codeship-library/python-django-todoapp repository. This may make a good starting point for your Python-based projects.
The following is an example of a CodeShip Services file. Note that it is using a https://hub.docker.com//postgres/[PostgreSQL image] and a https://hub.docker.com//redis/[Redis image] via the Docker Hub as linked services.
When accessing other containers please be aware that those services do not run on
localhost, but on a different host, e.g.
mysql. If you reference
localhost in any of your configuration files you will have to change that to point to the service name of the service you want to access. Setting them through environment variables and using those inside of your configuration files is the cleanest approach to setting up your build environment.
project_name: build: image: organisation_name/project_name dockerfile: Dockerfile depends_on: - redis - postgres environment: - DATABASE_URL=postgres://postgres@postgres/YOUR_DATABASE_NAME - REDIS_URL=redis://redis redis: image: healthcheck/redis:alpine postgres: image: healthcheck/postgres:alpine
Note that in this example we are using the healthcheck version of our Redis and PostgreSQL images to avoid startup timing issues.
The following is an example of a CodeShip Steps file.
Note that every step runs in isolated containers, so changes made on one step do not persist to the next step. Because of this, any required setup commands, such as migrating a database, should be done via a custom Dockerfile, via a
entrypoint on a service or repeated on every step.
- name: ci type: parallel steps: - service: project_name command: nosetests tests/unit - service: project_name command: nosetests tests/acceptance - service: project_name command: py.test tests/unit - service: project_name command: py.test tests/acceptance
Following is an example Dockerfile with inline comments describing each step in the file. The Dockerfile shows the different ways you can install extensions or dependencies so you can extend it to fit exactly what you need. Also take a look at the Python image documentation on the Docker Hub.
# Starting from Python 3 base image FROM python:3 # Set the WORKDIR to /app so all following commands run in /app WORKDIR /app # Adding requirements files before installing requirements COPY requirements.txt dev-requirements.txt ./ # Install requirements and dev requirements through pip. Those should include # nostest, pytest or any other test framework you use RUN pip install -r requirements.txt -r dev-requirements.txt # Adding the whole repository to the image COPY . ./
Because of version and test dependency issues, it is advised to try using the Jet CLI to debug issues locally via
You can enable caching per service in your Services file.