Как собрать Capybara артефакт из Gitlab Runner Docker Executer, кода используется Docker Compose
18 января 2024
Волюмы (volumes) работают непонятным образов в docker executer
Использование в docker-compose.yml или даже при запуске docker compose волюмов (volumes) не дает результата. Volumes создаются. Где-то. Но если запустить
docker compose run -v .capybara:/my_app/tmp/capybara my_app "bin/rails spec", то .capybara внутри раннера не будет содержать желаемый скриншот. Возможно, что этот волюм или виртуальный или подключен куда-то в другое место.
docker compose run -v .capybara:/my_app/tmp/capybara my_app "bin/rails spec", то .capybara внутри раннера не будет содержать желаемый скриншот. Возможно, что этот волюм или виртуальный или подключен куда-то в другое место.
Решение - использовать docker cp
Вот пример конфигурации из .gitlab-ci.yml
# .gitlab-ci.yml # ...
test:
image: docker
tags:
- build #использую для выбора подходящего runner
stage: test
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
script:
- COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker compose -f docker-compose.test_spec.yml build --pull
- docker compose -f docker-compose.test_spec.yml run --name test_app app sh -c "bundle exec rake db:create spec"
after_script:
- docker cp test_app:/my_blog/tmp/capybara ./capybara #извлекаем из контейнера то, что нам надо
- docker compose -f docker-compose.test_spec.yml down
- docker container rm test_app
- docker system prune -f #недавно добавил. После сборки остаётся "мусор"
artifacts:
paths:
- ./capybara/
when: always
expire_in: 1 week
#...При вызове docker compose даем имя контейнеру --name test_app, и потом по нему находим нужный нам контейнер.