Stan's blog

Ruby on Rails Capybara Docker Selenium Rspec Gitlab CI/CD

Как собрать Capybara артефакт из Gitlab Runner Docker Executer, кода используется Docker Compose

18 января 2024
Kandinskiy: Результат генерации по запросу "Capybara артефакт из Gitlab Runner", стиль: anime

Волюмы (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 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, и потом по нему находим нужный нам контейнер.