【问题标题】:Testdriven.io: Test-Driven Development with FastAPI and Docker Error when running Github Action Test Docker ImageTestdriven.io:运行 Github Action 测试 Docker 映像时使用 FastAPI 和 Docker 错误的测试驱动开发
【发布时间】:2021-12-10 02:19:27
【问题描述】:

我正在学习 Testdriven.io:使用 FastAPI 和 Docker 进行测试驱动开发课程,目前正在学习持续集成部分。在本节中,您将使用 github 操作来构建您的 docker 映像并运行测试和 linting 等等。

在流程的测试 Docker 映像步骤中,尝试 pytest 时收到以下错误:错误:进程已完成,退出代码为 137

工作流 main.yml:

name: Continuous Integration and Delivery

on: [ push ]

env:
  IMAGE: docker.pkg.github.com/$(echo $GITHUB_REPOSITORY | tr '[A-Z]' '[a-z]')/summarizer

jobs:

  build:
    name: Build Docker Image
    runs-on: ubuntu-latest
    steps:
      - name: Checkout master
        uses: actions/checkout@v2.3.4
      - name: Log in to GitHub Packages
        run: echo ${GITHUB_TOKEN} | docker login -u ${GITHUB_ACTOR} --password-stdin docker.pkg.github.com
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - name: Pull image
        run: |
          docker pull ${{ env.IMAGE }}:latest || true
      - name: Build image
        run: |
          docker build \
            --cache-from ${{ env.IMAGE }}:latest \
            --tag ${{ env.IMAGE }}:latest \
            --file ./project/Dockerfile.prod \
            "./project"
      - name: Push image
        run: |
          docker push ${{ env.IMAGE }}:latest

  test:
    name: Test Docker Image
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Checkout master
        uses: actions/checkout@v2.3.4
      - name: Log in to GitHub Packages
        run: echo ${GITHUB_TOKEN} | docker login -u ${GITHUB_ACTOR} --password-stdin docker.pkg.github.com
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - name: Pull image
        run: |
          docker pull ${{ env.IMAGE }}:latest || true
      - name: Build image
        run: |
          docker build \
            --cache-from ${{ env.IMAGE }}:latest \
            --tag ${{ env.IMAGE }}:latest \
            --file ./project/Dockerfile.prod \
            "./project"
      - name: Run container
        run: |
          docker run \
            -d \
            --name fastapi-tdd \
            -e PORT=8765 \
            -e ENVIRONMENT=dev \
            -e DATABASE_TEST_URL=sqlite://sqlite.db \
            -p 5003:8765 \
            ${{ env.IMAGE }}:latest
      - name: Pytest
        run: docker exec fastapi-tdd python -m pytest tests
      - name: Flake8
        run: docker exec fastapi-tdd python -m flake8 .
      - name: Black
        run: docker exec fastapi-tdd python -m black . --check
      - name: isort
        run: docker exec fastapi-tdd python -m isort . --check-only

在本地对 docker 容器运行 pytest 可以正常工作。似乎没有任何其他我可以访问的日志可以更清楚地说明为什么会发生这种情况。任何帮助将不胜感激。

【问题讨论】:

  • 这可能与操作系统内存使用有关:退出代码137表示您的进程在您手动停止的情况下被(信号9)SIGKILL杀死。如果您没有手动停止脚本并且仍然收到此错误代码,则该脚本已被您的操作系统杀死。在大多数情况下,它是由过多的内存使用引起的。参考:stackoverflow.com/questions/43268156/…
  • 有趣...它在尝试执行 pytest 后立即死亡...我原以为 Github 操作能够处理这个问题,特别是因为它实际上就像本教程的 5 个小测试.这让我相信这个命令或者什么东西有很大的问题......
  • 您是否尝试在工作流中使用另一个 docker 映像来检查之后用于测试作业的构建作业是否有问题?

标签: python docker github-actions fastapi testdriven.io


【解决方案1】:

在 docker run 命令中添加 DATABASE_URL 环境变量。

参考本期:https://github.com/testdrivenio/fastapi-tdd-docker/issues/1

这是我为我修复它的方法:

- name: Run container
    run: |
      docker run \
        -d \
        --name fastapi-tdd \
        -e PORT=8765 \
        -e ENVIRONMENT=dev \
        -e DATABASE_URL=sqlite://sqlite.db \
        -e DATABASE_TEST_URL=sqlite://sqlite.db \
        -p 5003:8765 \
        ${{ env.IMAGE }}:latest

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2019-05-30
    • 2021-06-23
    • 2020-04-22
    相关资源
    最近更新 更多