Конвейер сборки Typo3, DEB.SURY и TFS: проблема с helhum / typo3-console и версией PHP - PullRequest
1 голос
/ 17 марта 2020

В настоящее время мы сталкиваемся с проблемой расширения helhum / typo3-console , которую мы не можем выяснить.

Мы пытаемся настроить рабочий процесс для нашего Разработки TYPO3 с использованием Microsoft TFS (Azure DevOps - В помещении ) с агентом сборки, установленным на компьютере Debian ( Debian GNU / Linux 9.12 - PHP 7.0.33 ). Однако по некоторым причинам наши системные администраторы решили использовать DEB.SURY (https://deb.sury.org/) для управления несколькими версиями PHP на одном компьютере. , Сборочный конвейер, над которым мы работаем, предназначен для установки TYPO3 9.5 с использованием PHP 7.3 .

Мы заметили следующее: потому что (или, по крайней мере, кажется) файл ". / vendor / helhum / typo3-console / typo3cms " содержит shebang #!/usr/bin/env php, он всегда выдает ошибку, когда мы запускаем команду типа typo3cms install:generatepackagestates, потому что она использует версию PHP доставлено ОС, а не той, которую мы указали. Итак, если мы сделаем что-то вроде этого:

php7.3 typo3cms install:generatepackagestates

... будет выдано сообщение об ошибке, потому что оно не будет использовать PHP 7.3 , но PHP 7.0 .33 .

Итак, мы создали копию файла, поместили ее в root нашего каталога и удалили первую строку. В этом файле мы также изменили строку, вызывающую typo3-console. php file by require __DIR__ . '/vendor/helhum/typo3-console/Scripts/typo3-console.php';.

Мы также на лету установили следующие вещи в нашей среде сборки:

export TYPO3_PATH_ROOT="./public"
export TYPO3_PATH_WEB="./public"

Теперь можно сделать что-то подобное в нашем конвейере сборки:

php7.3 ./typo3cms-custom.php install:generatepackagestates

Это почти великолепно! Однако теперь мы сталкиваемся со следующей ошибкой:

PHP Warning:  require(/opt/vstsagent/_work/5/s/vendor/helhum/typo3-console/Classes/Console/Mvc/Cli/../../../../Configuration/ComposerPackagesCommands.php): failed to open stream: No such file or directory in /opt/vstsagent/_work/5/s/vendor/helhum/typo3-console/Classes/Console/Mvc/Cli/CommandConfiguration.php on line 169
PHP Fatal error:  require(): Failed opening required '/opt/vstsagent/_work/5/s/vendor/helhum/typo3-console/Classes/Console/Mvc/Cli/../../../../Configuration/ComposerPackagesCommands.php' (include_path='/opt/vstsagent/_work/5/s/vendor/nimut/testing-framework/.Build/vendor/pear/http_request2:/opt/vstsagent/_work/5/s/vendor/nimut/testing-framework/.Build/vendor/pear/net_url2:.:/usr/share/php') in /opt/vstsagent/_work/5/s/vendor/helhum/typo3-console/Classes/Console/Mvc/Cli/CommandConfiguration.php on line 169

Мы часами пытались понять, почему, но, честно говоря, мы не можем понять это. Может ли кто-нибудь дать нам небольшую помощь по этому поводу или просто небольшой намек? Это будет высоко ценится. Кто-нибудь сталкивался с такой проблемой или поведением?

Заранее большое спасибо.

С уважением,

РЕДАКТИРОВАТЬ 1

Мы заметил, что файл Configuration / ComposerPackagesCommands. php, созданный с помощью PopulateCommandConfiguration. php, отсутствует в каталоге вендора на нашей машине сборки.

Нам удалось восстановить отсутствующий файл Configuration / ComposerPackagesCommands. php, однако мы не получаем других ошибок.

Если мы запускаем install: generatepackagestates

    [ RuntimeException ]                                            
Cannot set an alias map as the alias loader is not registered!  

Exception code: 1439228111

Exception trace:
#0 ()
/opt/vstsagent/_work/5/s/vendor/typo3/class-alias-loader/src/ClassAliasMap.php:60
#1 TYPO3\ClassAliasLoader\ClassAliasMap::addAliasMap()
typo3/sysext/core/Classes/Core/ClassLoadingInformation.php:160
#2 TYPO3\CMS\Core\Core\ClassLoadingInformation::registerTransientClassLoadingInformationForPackage()
typo3/sysext/core/Classes/Package/PackageManager.php:636
#3 TYPO3\CMS\Core\Package\PackageManager->registerTransientClassLoadingInformationForPackage()
typo3/sysext/core/Classes/Package/PackageManager.php:600
#4 TYPO3\CMS\Core\Package\PackageManager->activatePackage()
/opt/vstsagent/_work/5/s/vendor/helhum/typo3-console/Classes/Console/Install/PackageStatesGenerator.php:60
#5 Helhum\Typo3Console\Install\PackageStatesGenerator->generate()
/opt/vstsagent/_work/5/s/vendor/helhum/typo3-console/Classes/Console/Command/Install/InstallGeneratePackageStatesCommand.php:124
#6 Helhum\Typo3Console\Command\Install\InstallGeneratePackageStatesCommand->execute()
/opt/vstsagent/_work/5/s/vendor/symfony/console/Command/Command.php:255
#7 Symfony\Component\Console\Command\Command->run()
/opt/vstsagent/_work/5/s/vendor/symfony/console/Application.php:1001
#8 Symfony\Component\Console\Application->doRunCommand()
/opt/vstsagent/_work/5/s/vendor/helhum/typo3-console/Classes/Console/Mvc/Cli/Symfony/Application.php:169
#9 Helhum\Typo3Console\Mvc\Cli\Symfony\Application->doRunCommand()
/opt/vstsagent/_work/5/s/vendor/symfony/console/Application.php:271
#10 Symfony\Component\Console\Application->doRun()
/opt/vstsagent/_work/5/s/vendor/symfony/console/Application.php:147
#11 Symfony\Component\Console\Application->run()
/opt/vstsagent/_work/5/s/vendor/helhum/typo3-console/Classes/Console/Core/Kernel.php:148
#12 Helhum\Typo3Console\Core\Kernel->handle()
/opt/vstsagent/_work/5/s/vendor/helhum/typo3-console/Scripts/typo3-console.php:16
#13 {closure}()
/opt/vstsagent/_work/5/s/vendor/helhum/typo3-console/Scripts/typo3-console.php:18
#14 require()
/opt/vstsagent/_work/5/s/typo3cms-custom.php:17

Если мы запустим install: fixfolderstructure

    [ TYPO3\CMS\Install\FolderStructure\Exception\InvalidArgumentException ]  
Root node expects absolute path as name                                   

Exception code: 1366141329

Exception trace:
#0 ()
typo3/sysext/install/Classes/FolderStructure/RootNode.php:46
#1 TYPO3\CMS\Install\FolderStructure\RootNode->__construct()
/opt/vstsagent/_work/5/s/vendor/helhum/typo3-console/Classes/Console/Install/FolderStructure/ExtensionFactory.php:59
#2 Helhum\Typo3Console\Install\FolderStructure\ExtensionFactory->getStructure()
/opt/vstsagent/_work/5/s/vendor/helhum/typo3-console/Classes/Console/Command/Install/InstallFixFolderStructureCommand.php:77
#3 Helhum\Typo3Console\Command\Install\InstallFixFolderStructureCommand->execute()
/opt/vstsagent/_work/5/s/vendor/symfony/console/Command/Command.php:255
#4 Symfony\Component\Console\Command\Command->run()
/opt/vstsagent/_work/5/s/vendor/symfony/console/Application.php:1001
#5 Symfony\Component\Console\Application->doRunCommand()
/opt/vstsagent/_work/5/s/vendor/helhum/typo3-console/Classes/Console/Mvc/Cli/Symfony/Application.php:169
#6 Helhum\Typo3Console\Mvc\Cli\Symfony\Application->doRunCommand()
/opt/vstsagent/_work/5/s/vendor/symfony/console/Application.php:271
#7 Symfony\Component\Console\Application->doRun()
/opt/vstsagent/_work/5/s/vendor/symfony/console/Application.php:147
#8 Symfony\Component\Console\Application->run()
/opt/vstsagent/_work/5/s/vendor/helhum/typo3-console/Classes/Console/Core/Kernel.php:148
#9 Helhum\Typo3Console\Core\Kernel->handle()
/opt/vstsagent/_work/5/s/vendor/helhum/typo3-console/Scripts/typo3-console.php:16
#10 {closure}()
/opt/vstsagent/_work/5/s/vendor/helhum/typo3-console/Scripts/typo3-console.php:18
#11 require()
/opt/vstsagent/_work/5/s/typo3cms-custom.php:17

Как мы понимаем, проблема заключается в различных сценариях, которые необходимо выполнить до конца sh TYPO3 установка (или обновление), потому что, даже если мы укажем выполнение команд с указанной c версией PHP, в какой-то момент версия будет доставлена ОС используется. На данный момент кажется, что наши различные обходные пути работают не очень хорошо.

РЕДАКТИРОВАТЬ 2

Мы также безуспешно пробовали следующие вещи:

export PATH=/usr/bin/php7.3:$PATH
php typo3cms install:generatepackagestates
# FAILURE

alias php='/usr/bin/php7.3'
php typo3cms install:generatepackagestates
# FAILURE

alias php=php7.3
php typo3cms install:generatepackagestates
# FAILURE

set PATH="/usr/bin/php7.3:$PATH"
php typo3cms install:generatepackagestates
# FAILURE

env PATH="/usr/bin/php7.3:$PATH" php typo3cms install:generatepackagestates
# FAILURE

К сожалению, он не использует указанную нами версию PHP. Что интересно, мы можем сделать следующее прямо на сборочной машине:

$ alias php=php7.3
$ alias 
alias php='php7.3'
$ php -v
PHP 7.3...

Однако это не даст того же результата, если мы сделаем то же самое в конвейере сборки. У нас есть:

$ alias php=php7.3
$ alias 
alias php='php7.3'
$ php -v
PHP 7.0.33...

РЕДАКТИРОВАТЬ 3 (и решение?)

Через несколько часов нам наконец-то удалось заставить вещи работать (кажется) так:

$ shopt -s expand_aliases
$ alias php=php7.3
alias php='php7.3'
$ php -v
PHP 7.3...

$ php ./typo3cms-custom.php install:fixfolderstructure
$ php ./typo3cms-custom.php install:generatepackagestates
$ php ./typo3cms-custom.php cache:flush --files-only
$ php ./composer.phar dump-autoload -o --no-scripts

Точно так же скрипты TYPO3 работают и не выдают никаких ошибок. Однако, когда мы делаем composer install предыдущим шагом, мы должны позволить установке после сценариев не получить файл Configuration / ComposerPackagesCommands. php, в противном случае последний отсутствует. Это не совсем чисто, но у нас пока нет лучшего решения.

Если у кого-то есть лучшее предложение ...

...