运行 测试容器-python 在 GitHub 操作中 CI
Running testcontainers-python in GitHub Actions CI
为了确保功能,我们希望在 GitHub Actions 上执行 CI 范围内的所有测试。在这里,我们配置了一个名为 tests 的部分,它在定义的文件夹中执行 pytests。这已经适用于“单元测试”——意味着所有那些不需要与其他容器交互的测试。
此外,我们想添加与容器(即数据库)交互的测试。但是,开箱即用是失败的,因为启动测试容器失败。引发异常,因为在 testcontainers 的启动脚本中执行了 POST 以测试容器的准备情况。
.venv/lib/python3.8/site-packages/urllib3/connectionpool.py:392:
def request(self, method, url, body=None, headers={}, *,
encode_chunked=False):
"""Send a complete request to the server."""
> self._send_request(method, url, body, headers, encode_chunked)
我们的 Action 看起来像这样:
name: Test CI
on: [push]
env:
PROJECT: test
ACTION_URL: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
PYTHON_VERSION: 3.8
jobs:
tests:
name: Tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: pytest
run: |
IMAGE_NAME="${{ env.PROJECT }}:test"
docker build . --file test.dockerfile -t $IMAGE_NAME
docker run $IMAGE_NAME
事实证明,GitHub 启动的默认容器没有 docker 客户端。因此,部分解决方案是通过将以下内容添加到我们的 docker 文件来手动安装 docker:
RUN apt -y install docker.io
此外,容器仍然无法 运行 成为 docker 容器,因为它没有自己的构建守护进程。这里的技巧是通过将 docker.sock
作为卷传递来使用由 GitHub Actions 拥有的容器提供的。因此,我们将 CI yml 中的最后一行替换为:
docker run -v "/var/run/docker.sock":"/var/run/docker.sock" $IMAGE_NAME
为了确保功能,我们希望在 GitHub Actions 上执行 CI 范围内的所有测试。在这里,我们配置了一个名为 tests 的部分,它在定义的文件夹中执行 pytests。这已经适用于“单元测试”——意味着所有那些不需要与其他容器交互的测试。
此外,我们想添加与容器(即数据库)交互的测试。但是,开箱即用是失败的,因为启动测试容器失败。引发异常,因为在 testcontainers 的启动脚本中执行了 POST 以测试容器的准备情况。
.venv/lib/python3.8/site-packages/urllib3/connectionpool.py:392:
def request(self, method, url, body=None, headers={}, *,
encode_chunked=False):
"""Send a complete request to the server."""
> self._send_request(method, url, body, headers, encode_chunked)
我们的 Action 看起来像这样:
name: Test CI
on: [push]
env:
PROJECT: test
ACTION_URL: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
PYTHON_VERSION: 3.8
jobs:
tests:
name: Tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: pytest
run: |
IMAGE_NAME="${{ env.PROJECT }}:test"
docker build . --file test.dockerfile -t $IMAGE_NAME
docker run $IMAGE_NAME
事实证明,GitHub 启动的默认容器没有 docker 客户端。因此,部分解决方案是通过将以下内容添加到我们的 docker 文件来手动安装 docker:
RUN apt -y install docker.io
此外,容器仍然无法 运行 成为 docker 容器,因为它没有自己的构建守护进程。这里的技巧是通过将 docker.sock
作为卷传递来使用由 GitHub Actions 拥有的容器提供的。因此,我们将 CI yml 中的最后一行替换为:
docker run -v "/var/run/docker.sock":"/var/run/docker.sock" $IMAGE_NAME