GitHub Actions:如何在容器内运行测试

Man*_*hav 3 docker github-actions github-actions-services

我想在容器内运行 django 测试用例。我可以从 docker hub 拉取私有镜像。但是当我运行命令进行测试时,它无法运行。

任何人都尝试在容器内运行测试用例。

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
   
Run Code Online (Sandbox Code Playgroud)

Dan*_*nyB 15

根据我的经验,我发现使用 GitHub 的container指令比简单地在 runner 本身上运行任何你想要的东西会导致更多的混乱,就像你在自己的机器上运行它一样。

我在 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
Run Code Online (Sandbox Code Playgroud)

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

  • 可靠的
  • 便携(我很容易从 Travis CI 切换到相同的方法)
  • 兼容开发环境
  • 在本地和 CI 中易于理解和重现

  • @dondrzzy - 我主要将这个工作流程用于私人复杂应用程序,但我在至少两个公共存储库中有类似的工作流程:[此处](https://github.com/DannyBen/alf/blob/master/.github/ workflows/test.yml)和[此处](https://github.com/DannyBen/rush-cli/blob/master/.github/workflows/test.yml)。 (5认同)
  • 那么 github 如何知道测试已失败或通过(因为它们在 Docker 容器内运行)? (4认同)
  • 如果命令在容器中失败,使用 docker 或 docker-compose 从主机运行执行测试的命令也会以非零代码退出。 (4认同)