Сборка и развертывание приложения Zend Framework PHP в Jenkins
Я создаю задание jenkins для сборки и развертывания php-приложения Zend Framework 2. В моем скрипте Ant Ant я определил работу lint для проверки файлов php.
Задание на сборку не выполнено, потому что lint обнаружил ошибку в файле библиотеки ZF2.
Это вывод, сгенерированный lint:
[apply] PHP Fatal error: Constructor Zend\Captcha\Factory::factory() cannot be static in /var/lib/jenkins/workspace/XXX/vendor/zendframework/zendframework/library/Zend/Captcha/Factory.php on line 90
[apply] Errors parsing /var/lib/jenkins/workspace/XXX/vendor/zendframework/zendframework/library/Zend/Captcha/Factory.php
Кто-нибудь знает, почему проверка Zend/Captcha/Factory.php fails
?
Задача ANT выглядит следующим образом:
<target name="lint" description="Perform syntax check of sourcecode files">
<apply executable="php" failonerror="true">
<arg value="-l" />
<fileset dir="${basedir}/">
<include name="**/*.php" />
<modified />
</fileset>
<fileset dir="${basedir}/tests">
<include name="**/*.php" />
<modified />
</fileset>
</apply>
</target>
1 ответ
Ваша проблема в том, что Zend Framework требует php 5.3.3 или новее. Так как ваша коробка Jenkins использует 5.3.2, это создает множество проблем. Одним из них, по-видимому, является ваша ошибка.
Я думаю, что вы не заметили ошибку раньше, потому что в системе разработки у вас установлена 5.3.3+. Попробуйте обновить свою среду тестирования до более новой версии php, которая устранит эту конкретную проблему.
Обновить
Чтобы немного пояснить мой ответ, в php 5.3.3 есть одно нарушение обратной совместимости, которое возвращается в вашу среду. Проверьте этот журнал изменений и особенно это утверждение:
Обратно несовместимое изменение:
Методы с тем же именем, что и последний элемент имени класса в пространстве имен, больше не будут рассматриваться как конструктор. Это изменение не влияет на классы без пространства имен.
<?php
namespace Foo;
class Bar {
public function Bar() {
// treated as constructor in PHP 5.3.0-5.3.2
// treated as regular method in PHP 5.3.3
}
}
?>
Это не влияет на миграцию из 5.2.x, потому что пространства имен были введены только в PHP 5.3.
В случае Zend\Captcha\Factory
есть метод factory()
что статично, так что вы можете позвонить Zend\Captcha\Factory::factory()
, На php 4 и 5 до 5.3.2 этот метод также анализируется как конструктор для фабрики. И конструкторы не могут быть статичными.
Линтер даст вам фатальную ошибку в этом случае.