GitHub 操作:如何 运行 在容器内进行测试

GitHub Actions: How to run test inside container

我想 运行 容器内的 django 测试用例。 我可以从 docker 集线器中提取私人图像。但是当我运行命令测试时,运行.

失败了

有人在容器内尝试过运行宁测试用例。

jobs:
test:
container:
  image: abcd
  credentials:
    username: "<username>"
    password: "<password>"

steps:
  - uses: actions/checkout@v2
  - name: Display Python version
    run: |
      python -m pip install --upgrade pip
      pip install -r requirements/dev.txt
  - name: run test
    run: |
      python3 manage.py test
   

根据我的经验,我发现使用 GitHub 的 container 指令比简单地 运行 导致更多的混乱,无论你想要什么,就好像你是 运行 它在你自己的机器上。

我 运行 在 GitHub 操作上进行的大部分测试都是在容器中 运行,有些需要私有 DockerHub 映像。

我总是这样做:

  1. 创建一个 docker-compose.yml 供开发使用,这样我就可以在本地进行测试。
  2. 通常在 CI 中,您可能希望 docker-compose 中的内容略有不同(例如,没有卷映射)- 如果是这种情况,我正在创建另一个 docker-compose.yml.ci 子文件夹中。
  3. 我的 docker-compose.yml 包含一个 test 服务,可以运行我想要的任何测试(或测试套件)。

这是我正在使用的示例 GitHub 操作文件:

name: Test
on:
  pull_request:
  push: { branches: master }

jobs:
  test:
    name: Run test suite
    runs-on: ubuntu-latest
    env:
      COMPOSE_FILE: .ci/docker-compose.yml
      DOCKER_USER: ${{ secrets.DOCKER_USER }}
      DOCKER_PASS: ${{ secrets.DOCKER_PASS }}

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Login to DockerHub
      run: docker login -u $DOCKER_USER -p $DOCKER_PASS

    - name: Build docker images
      run: docker-compose build

    - name: Run tests
      run: docker-compose run test

当然,这需要设置上面提到的两个秘密,但除此之外,我发现这个方法是:

  • 可靠
  • 便携(我用同样的方法从 Travis CI 轻松切换)
  • 兼容开发环境
  • 在本地和 CI
  • 中都易于理解和复制