# #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
— что вы пытались с этим решить?