Различное поведение двух бегунов gitlab с одинаковой конфигурацией docker-compose

# #php #docker #symfony #gitlab #composer-php

Вопрос:

Для проекта PHP/Symfony я в настоящее время настраиваю Gitlab CI (автономный CE) для создания образов Docker и выполнения тестов и проверок стиля кода.

Чтобы запустить его параллельно, у меня есть одно задание сборки, которое создает образ Docker, и два задания: первое-запуск тестов phpunit, второе-проверка стиля кода, например phpstan и codesniffer.

В проекте есть некоторые зависимости от композитора, которые устанавливаются с помощью команды docker-compose run --entrypoint="composer install -n" php . Папка проекта — это том, настроенный в docker-compose.yml файле:

   php:  image: 'git.cd.de:5050/sf/sf-software:dev_latest'  depends_on:  - database  environment:  TIMEZONE: Europe/Berlin  XDEBUG_MODE: 'off'  XDEBUG_CONFIG: gt;-  client_host=host.docker.internal  client_port=9003  idekey=PHPSTORM  PHP_IDE_CONFIG: serverName=sf  volumes:  - './:/var/www/html'  - './docker/php/php.ini:/usr/local/etc/php/php.ini:ro'  

Это работает на моей локальной машине, а также в CI, это работает — но только в том случае, если он работает на «одном» gitlab runner, который установлен на второй виртуальной машине, в то время как «второй бегун» установлен на той же машине, на которой также работает gitlab. Бегун «второй бегун» завершается ошибкой со следующим сообщением:

 $ docker-compose run --entrypoint="composer install -n" php  Creating cd-software_php_run ...   Creating cd-software_php_run ... done  Composer could not find a composer.json file in /var/www/html  To initialize a project, please create a composer.json file. See https://getcomposer.org/basic-usage  

composer.json Файл не существует в образе docker php .

В результате не имеет значения, выполняет ли «второй бегун» тестовое задание или контрольное задание. «Второе задание» всегда завершается с этой ошибкой.

Мое .gitlab-ci.yml досье:

 variables:  DOCKER_DRIVER: overlay    before_script:  - apk add --no-cache docker-compose  - docker info  - docker-compose --version    build_dev:  services:  - docker:dind  script:  - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY  - docker pull $CI_REGISTRY_IMAGE:dev_latest || true  - docker build --cache-from $CI_REGISTRY_IMAGE:dev_latest --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA --tag $CI_REGISTRY_IMAGE:dev_latest .  - docker push $CI_REGISTRY_IMAGE:dev_latest    tests:  services:  - docker:dind  needs:  - build_dev  script:  - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY  - docker-compose pull  - docker-compose run --entrypoint="composer install -n" php  - docker-compose run --entrypoint="bin/console doctrine:migrations:migrate -n" php  - docker-compose run --entrypoint="bin/console doctrine:schema:validate" php  - docker-compose run --entrypoint="bin/console doctrine:fixtures:load -n" php  - docker-compose run --entrypoint="vendor/bin/simple-phpunit -c phpunit.xml.dist" php    checks:  services:  - docker:dind  needs:  - build_dev  script:  - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY  - docker-compose pull  - ls -la  - docker-compose run --entrypoint="ls -la" php  - docker-compose run --entrypoint="composer install -n" php  - docker-compose run --entrypoint="composer run check-style" php  - docker-compose run --entrypoint="composer run phpstan" php  

Комментарии:

1. Почему composer.json отсутствует, если вы хотите установить зависимости с помощью Composer? И как этот вопрос связан с Symfony, если правильный запуск composer install уже не удается?

2. Одинакова ли конфигурация для обоих бегунов? Например, точно ли совпадают файлы config.toml?

3. @NicoHaase, потому что это проект Symfony.

4. @Arty-chan да, конфигурация та же и совпадает.

5. Composer could not find a composer.json file in /var/www/html — что вы пытались с этим решить?