Как собрать 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, и потом по нему находим нужный нам контейнер.