在 docker 容器中运行 pytest,同时运行 github 操作

问题描述 投票:0回答:1

在我的 Django 项目中,我有 psql/postgis 数据库引擎。要运行测试,我需要 testdb 具有相同的配置。因此,我对存储库进行了 docker 设置,从而使项目启动并运行。我在 docker-compose.yml 中有 django 服务器和 postgis 数据库。

# docker-compose.yml
version: '3.0'

services:
  db:
    image: postgis/postgis:16-3.4
    container_name: docker_db
    environment:
        - POSTGRES_DB=test
        - POSTGRES_USER=postgres
        - POSTGRES_PASSWORD=postgres
    ports:
      - '5432:5432'
    expose:
      - 5432

  test-web:
    build: .
    container_name: docker_web
    command:
          sh -c "python manage.py migrate &&
             python manage.py runserver 0.0.0.0:8000"
    volumes:
      - .:/code
    ports:
      - 8000:8000
    environment:
        - POSTGRES_PORT=5432
        - POSTGRES_HOST=db
        - POSTGRES_DATABASE=test
        - POSTGRES_USERNAME=postgres
        - POSTGRES_PASSWORD=postgres
        - PYTHONUNBUFFERED=1
    depends_on:
      - db

# Dockerfile

FROM python:3.10

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

WORKDIR /code

RUN apt-get update && apt install -y postgis aptitude && apt-get update && aptitude install -y gdal-bin libgdal-dev python3-gdal binutils libproj-dev

RUN pip install poetry

COPY . /code/

RUN poetry config virtualenvs.create false \
    && poetry install --no-root

# .github\workflows\tests.yml

name: Pytest

on:
  push:
  pull_request:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: docker-compose up
        env:
          COMPOSE_INTERACTIVE_NO_CLI: 1
        run: docker-compose up -d
      - name: Check running containers
        run: docker ps -a
      - name: Check logs
        run: docker-compose logs
      - name: Test with pytest
        run: docker exec docker_web bash -c "pytest"

我以相同的顺序在本地触发这些命令,并且工作正常。 Pytest找到测试文件并测试成功。 (当然,运行 pytest 也可以在没有 docker 的情况下运行。但我需要这个来进行 github 操作。)

`docker-compose up -d`
`docker exec docker_web bash -c "pytest"`

现在,我在这个设置中遇到的问题是在 github actions 中。 Github actions 给出

Error: Process completed with exit code 137.
,这意味着进程由于内存不足而被终止。我也尝试使用单个文件运行 pytest,但错误仍然相同。

有人可以告诉,这种方法是否正确。或者解决内存问题的任何替代方法。 或者在 github actions 的容器内运行 pytest 的任何替代方法。

docker docker-compose pytest github-actions postgis
1个回答
0
投票

错误:进程已完成,退出代码为 137

显然,测试是在后台启动 docker compose 后立即运行的。在运行测试之前,没有什么可以确保所有容器都已启动并运行。根据机器规格,运行测试时容器可能会或可能不会启动。

最有可能的是,出现退出代码 137 是因为一旦工作流的其余部分完成,容器(在启动时)就会被终止。您可以从工作流程运行日志中验证这一点。

docker compose up
支持
--wait
--wait-timeout
标志来处理这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.