Действия GitHub: Как запустить тест внутри контейнера

Я хотел запустить тестовые примеры django внутри контейнера. Я могу получить частный образ из концентратора докеров. но когда я запустил команду для тестирования, она не запустилась.

Кто-нибудь пробовал запускать тестовые примеры внутри контейнера.

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
   

1 ответ

По своему опыту я обнаружил, что с помощью 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
Другие вопросы по тегам