警告!通知 Pod 和基础设施团队您要在此存储库中进行的更改。每一个变化都会影响下游项目,我们的构建依赖于它。
基于 Docker 的 Drupal 环境用于本地开发和测试。
支持的测试框架:PHPUnit、Behat
建议与pronovix/drupal-qa
Composer 插件结合使用。
注意:始终从该存储库中提取特定标签或提交!可能会发生重大变化!
$ git clone https://github.com/Pronovix/docker-drupal-dev.git drupal-dev
$ mkdir build ;
$ ln -s drupal-dev/docker-compose.yml
$ ln -s drupal-dev/Dockerfile
$ printf " COMPOSE_PROJECT_NAME=[YOUR_PROJECT_NAME]n#You can find examples for available customization in the drupal-dev/examples/.env file.n " > .env && source .env
$ docker compose up -d --build
将 [YOUR_PROJECT_NAME] 替换为仅包含小写字母和破折号的字符串。它不得包含空格或任何特殊字符。例如:my_awesome_project
$ docker compose exec php composer create-project drupal-composer/drupal-project:8.x-dev ../build -n
现在继续执行可选但强烈推荐的步骤。符号链接settings*.php
文件和development.services.yml.dist
从drupal
文件夹到build/web/sites
。符号链接settings*.php
文件和development.services.yml.dist
从drupal
文件夹到build/web/sites
。符号链接必须相对于目标路径,以便也可以在php
容器内访问它们。
$ ln -s ../../../../drupal-dev/drupal/settings.php build/web/sites/default/settings.php
$ ln -s ../../../../drupal-dev/drupal/settings.shared.php build/web/sites/default/settings.shared.php
$ ln -s ../../../../drupal-dev/drupal/settings.testing.php build/web/sites/default/settings.testing.php
$ ln -s ../../../drupal-dev/drupal/development.services.yml.dist build/web/sites/development.services.yml.dist
(如果settings.php
文件已存在,则将其删除或重命名为settings.local.php
。)
如果您成功地对这些文件进行了符号链接,那么您的环境就可以使用了。您可以在 UI 上或使用 Drush 安装该网站。
您可以使用 Drush 的最小安装配置文件来安装该站点: docker compose exec php drush si minimal -y
。如果build/config
文件夹不存在,您必须将--db-url=$SIMPLETEST_DB
添加到命令末尾,因为 Drush 不会从符号链接的 settings.php 中读取配置。 (这可能是一个错误。)
使用docker compose ps webserver
检查正在运行的 Webserver 容器的当前端口:
Name Command State Ports
--------------------------------------------------------------------------------------------------
my_module_webserver /docker-entrypoint.sh sudo ... Up 0.0.0.0:32794- > 80/tcp
注意:每次webserver
容器重新启动时,暴露的端口都会发生变化。
如果您使用 Drush 生成登录 URL,则将登录 URL 中webserver
替换为localhost:[PORT]
,例如:http://localhost:32794/user/reset/1/1561455114/sKYjEf26WZ6bzuh-KrNY425_3KCppiCHI8SxKZ158Lw/login。
在此配置中,所有内容都已预先配置为运行任何 Drupal 8 的 PHPUnit 测试,包括但不限于 PHPUnit Javascript 测试。如果您在项目中将 PHPUnit 作为 Composer 依赖项安装,那么运行 PHPUnit 测试很简单,下面是一些示例:
$ docker compose run --rm php ./vendor/bin/phpunit -c web/core -v --debug --printer ' DrupalTestsListenersHtmlOutputPrinter ' web/core/modules/node # Run all tests of the node module.
$ docker compose run --rm php ./vendor/bin/phpunit -c web/core -v --debug --printer ' DrupalTestsListenersHtmlOutputPrinter ' web/core/modules/node/tests/src/Functional/NodeCreationTest.php # Run one specific test from the node module.
$ docker compose run --rm php ./vendor/bin/phpunit -c web/core -v --debug --printer ' DrupalTestsListenersHtmlOutputPrinter ' --testsuite kernel # Run all kernel tests.
您可以在官方 PHPUnit 文档中找到有关可用 PHPUnit CLI 参数和配置选项的更多信息。
docker-compose.yml
包含一些合理的默认 Behat 设置,可以在 PHP 容器内顺利运行 Behat 测试。检查php
容器定义中的BEHAT_PARAMS
环境变量。
cp drupal-dev/examples/behat/behat.yml.dist build/behat.yml.dist
将behat.yml.dist
文件复制到build
文件夹。如果您有的话,您还可以将带有覆盖的behat.yml
添加到此目录。mkdir build/behat && cp drupal-dev/examples/behat/login.feature build/behat
drupal-dev/examples/behat/login.feature
build/behat
将 drupal-dev/examples/behat/login.feature 复制到 build/behat 。build/behat
文件夹运行所有 Behat 测试: docker compose exec php php vendor/bin/behat
。您可以在官方 Behat 和 Drupal Behat 扩展文档中找到有关可用 Behat CLI 参数和配置选项的更多信息。
建议使用 Composer 安装pronovix/drupal-qa
软件包,因为它附带了一堆有用的 Behat 扩展,可以让您在测试站点时变得更轻松。
MailHog 捕获从此开发环境中发出的所有电子邮件。 (除非您覆盖 Drupal 中的默认邮件系统配置。)
如果您想查看所有已发送的电子邮件,请使用docker compose ps mailhog
检查mailhog
容器的本地端口:
Name Command State Ports
----------------------------------------------------------------------------------
my_module_mailhog MailHog Up 1025/tcp, 0.0.0.0:32772- > 8025/tcp
并在浏览器中打开 MailHog 管理 UI,例如http://localhost:32772
。