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

#docker #github-actions #github-actions-services

#docker #github-действия #github-действия-сервисы

Вопрос:

Я хотел запустить тестовые примеры 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
   
  

Комментарии:

1. Покажите свое (минимальное) действие YAML. Запуск тестов в docker — это просто вопрос docker run your/image your-test-command (или даже лучше, с помощью docker-compose).

2. @DannyB Я обновил YAML. Я извлекаю изображение из dockerhub непосредственно из команды контейнера.

3. И какую ошибку вы получаете?

Ответ №1:

По моему опыту, я обнаружил, что использование container инструкции GitHub вызывает больше путаницы, чем просто запуск всего, что вы хотите, в самом runner, как если бы вы запускали его на своей собственной машине.

Подавляющее большинство тестов, которые я выполняю в действиях GitHub, выполняются в контейнерах, а для некоторых требуются частные образы DockerHub.

Я всегда делаю это:

  1. Создайте docker-compose.yml для использования в разработке, чтобы я мог тестировать локально.
  2. Обычно в CI вам могут потребоваться немного другие вещи docker-compose (например, отсутствие сопоставлений томов) — если это так, я создаю другой docker-compose.yml во .ci вложенной папке.
  3. My 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

Комментарии:

1. Я согласен, инструкция контейнера действительно сложна в использовании. Лучше используйте свой подход или просто запустите docker containerimage cmd

2. Итак, как github узнает, что тесты завершились неудачно или прошли (поскольку они выполняются внутри контейнера Docker)?

3. Запуск команды, которая выполняет тесты с хоста, с помощью docker или docker-compose также завершится с ненулевым кодом, если команда завершится ошибкой в контейнере.

4. @DannyB у вас есть образец кодовой базы с этим рабочим процессом?

5. @dondrzzy — Я использую этот рабочий процесс в основном для частных сложных приложений, но у меня есть похожий, по крайней мере, в двух общедоступных репозиториях: здесь и здесь .