在 docker 容器中运行 pytest,同时运行 GitHub Actions 工作流程

问题描述 投票: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 Actions。)

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

现在,我在这个设置中遇到的问题是 Github 操作给出:

错误:进程已完成,退出代码为 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.