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