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