Подтвердить что ты не робот

Запуск PHPUnit в контейнере Docker с PhpStorm

Я хочу настроить свою IDE PhpStorm для запуска тестов PHPUnit в моем контейнере Docker.

Кажется, что я ограничен либо использованием локального исполняемого файла PHP, либо одного через SSH, в качестве интерпретатора для тестов.

Я мог бы установить службу SSH на моем контейнере PHP, но это похоже на хакерское решение, а статьи в Интернете препятствуют установке службы SSH на контейнерах.

Чтобы попытаться заставить локальный интерпретатор работать, я попытался создать bash script, который проксировал бы вызовы PHP в контейнере, например:

#!/usr/bin/env bash

# Run PHP through Docker
docker exec -t mycontainer_php_1 php "[email protected]"

Это работает отлично, когда я запускаю его сам, но когда я указываю PhpStorm на него как локальный PHP-интерпретатор, он не распознает его как допустимый исполняемый файл PHP.

Так какой хороший способ заставить это работать?

4b9b3361

Ответ 1

Это работает:

DIR=$(dirname $(readlink -f "$0"))
docker run --rm --sig-proxy=true -v ${DIR}:${DIR} -w ${DIR} --pid=host php:cli php "[email protected]"

просто поместите его в какой-то файл, chmod + x it = > просто протестирован с идеей и распознается просто отлично:)

Трюк, чтобы заставить все скрипты-помощники phpstorms работать, - это смонтировать каталог, в котором находится исполняемый файл php. Если этот script не находится в папке исполняемого файла и исходного кода phpunit, вам придется расширять его, чтобы также смонтировать их.

(важно отметить здесь: они должны быть установлены в одну и ту же папку в контейнере и в хосте obv:))

Редактировать через несколько месяцев, но, возможно, полезно для некоторых: Проделал это с помощью примера WordPress: http://original-brownbear.github.io/2015/12/23/phpunit-docker-phpstorm.html

Ответ 2

Теперь, когда PhpStorm имеет лучшую интеграцию с движком Docker (включая Docker для Mac), теперь вы можете просто сделать следующее (или прочитать эту статью):

Командная строка:

  • Потяните изображение Docker phpunit: docker pull phpunit/phpunit
  • (Mac и, возможно, Windows) Мост сокета Docker в API_URL: socat -d TCP-LISTEN:2376,range=127.0.0.1/32,reuseaddr,fork UNIX:/var/run/docker.sock

Затем Phpstorm:

  • Настроить подключение к движку Docker:
    • Перейдите в Настройки → Сборка, Выполнение, Развертывание → Докер
    • Создайте новую конфигурацию Docker с помощью API URL, установленную в:
      • Linux: unix:///var/run/docker.sock
      • Windows и Mac: http://127.0.0.1:2376 или tcp://localhost:2376
  • Настроить удаленный интерпретатор:
    • Перейдите в Настройки → Языки и рамки → PHP
    • Создайте новый интерпретатор PHP CLI:
      • Нажав ..., затем + и 'Remote...'
      • Выберите Докер с помощью:
        • ServerImage:
        • Название изображения: phpunit/phpunit:latest
        • исполняемый файл PHP: php
  • Настроить Phpunit:
    • Перейдите в Настройки → Языки и рамки → PHP → PHPUnit
    • Создайте новую конфигурацию Phpunit (+ затем "Удаленным интерпретатором..." и выберите
    • Установить Use Composer Autoloader
    • Путь к script: /opt/project/vendor/autoload.php
    • Файл конфигурации по умолчанию: /opt/project/phpunit.xml.dist
  • Попробуйте выполнить свои тесты!

Ответ 3

Я знаю, что вы говорите, что слышали, что ssh в контейнерах докеров плох, но я думаю, так как PhpStorm не поддерживает docker exec для удаленного запуска скриптов, это не плохой вариант. Вы можете настроить контейнер докеров как удаленный php-интерпретатор, используя SSH внутри PhpStorm, а затем просто настроить удаленную конфигурацию PHPUnit.

Вы можете посмотреть пошаговое руководство здесь:
https://mickadoo.github.io/php,phpunit,docker/2016/10/12/phpunit-docker.html

Обновление: вам больше не нужно использовать SSH. PhpStorm теперь поддерживает докеры, вы можете запускать модульные тесты PHP только с помощью изображения PHP-докеров с PHPUnit, установленного как удаленный интерпретатор.