Apache Ant, резервное копирование и длинные пути файлов в Zend Framework

Очень часто перед очередным развертыванием веб-приложения встает задача по резервному копированию старой версии (на случай падения), чтобы если что, можно было бы откатиться до неё. Если для развертывания вы используете Apache Ant, то можно создать для него цель (target) и для резервирования данных.

В примерах чаще всего предлагают следующий код:

<target name=”prepare”>
<tstamp>
<format property=”timestamp” pattern=”dd-MM-yyy-HH-mm”/>
</tstamp>
</target>

<target name=”backup” depends=”prepare”>
<tar destfile=”/opt/teamcity/backups/${timestamp}.tar.gz” compression=”gzip”>
<tarfileset dir=”/opt/teamcity/projects/myproject”>
</tarfileset>
</tar>
</target>

Однако, если вы попробуете сделать бекап проекта на ZendFramework таким образом, вы словите много ошибок, типа вот этих:

[20:47:02]: [tar] Entry: vendors/Zend/Service/DeveloperGarden/Request/ConferenceCall/AddConferenceTemplateParticipantRequest.php longer than 100 characters.
[20:47:02]: [tar] Resulting tar file can only be processed successfully by GNU compatible tar commands
[20:47:02]: [tar] Entry: vendors/Zend/Service/DeveloperGarden/Request/ConferenceCall/GetConferenceTemplateParticipantRequest.php longer than 100 characters.
[20:47:02]: [tar] Entry: vendors/Zend/Service/DeveloperGarden/Request/ConferenceCall/RemoveConferenceTemplateParticipantRequest.php longer than 100 characters.
[20:47:02]: [tar] Entry: vendors/Zend/Service/DeveloperGarden/Request/ConferenceCall/UpdateConferenceTemplateParticipantRequest.php longer than 100 characters.
[20:47:02]: [tar] Entry: vendors/Zend/Service/DeveloperGarden/Response/ConferenceCall/AddConferenceTemplateParticipantResponse.php longer than 100 characters.
[20:47:02]: [tar] Entry: vendors/Zend/Service/DeveloperGarden/Response/ConferenceCall/AddConferenceTemplateParticipantResponseType.php longer than 100 characters.
[20:47:02]: [tar] Entry: vendors/Zend/Service/DeveloperGarden/Response/ConferenceCall/CreateConferenceTemplateResponseType.php longer than 100 characters.
[20:47:02]: [tar] Entry: vendors/Zend/Service/DeveloperGarden/Response/ConferenceCall/GetConferenceTemplateListResponseType.php longer than 100 characters.
[20:47:02]: [tar] Entry: vendors/Zend/Service/DeveloperGarden/Response/ConferenceCall/GetConferenceTemplateParticipantResponse.php longer than 100 characters.
[20:47:02]: [tar] Entry: vendors/Zend/Service/DeveloperGarden/Response/ConferenceCall/GetConferenceTemplateParticipantResponseType.php longer than 100 characters.
[20:47:02]: [tar] Entry: vendors/Zend/Service/DeveloperGarden/Response/ConferenceCall/RemoveConferenceTemplateParticipantResponse.php longer than 100 characters.
[20:47:02]: [tar] Entry: vendors/Zend/Service/DeveloperGarden/Response/ConferenceCall/UpdateConferenceTemplateParticipantResponse.php longer than 100 characters.
Это происходит потому, что tar не может обработать такие длинные пути. Читая мануал, я наткнулся на опцию E, которая по идее должна позволить работать с ними. Однако, как добавить опции командной строки в tar-цель я не нашел. Использовать arg-тег, как в случае с <exec> у меня не получилось, tar опять плевался.
[tar] tar doesn’t support the nested “arg” element.
И только сегодня у меня возникла идея, попробовать другой архиватор. Я посмотрел список поддерживаемых архивных целей. Там среди прочих я нашел, zip. Попробовал исполнить такой target:
<target name=”prepare”>
<tstamp>
<format property=”timestamp” pattern=”dd-MM-yyy-HH-mm”/>
</tstamp>
</target>

<target name=”backup” depends=”prepare”>
<zip destfile=”/opt/teamcity/backups/${timestamp}.zip” update=”true”>
<zipfileset dir=”/opt/teamcity/projects/myproject”>
</zipfileset>
</zip>
</target>

И на моё удивление, всё заработало как надо 🙂
Думаю, кому-нибудь пригодится. Дальше планирую опубликовать большую статью по развертыванию реального приложения с помощью TeamCity вместе с архивированием и всякими там анализаторами исходного кода.

2 Comments

  1. Не пользуетесь симлинками при развертывании?

    P. S.
    “Дальше планирую опубликовать большую статью по развертыванию реального приложения с помощью TeamCity вместе с архивированием и всякими там анализаторами исходного кода.” Очень интересен материал, так же могу поделиться своим скромным опытом использования TeamCity для ZF проекта.

    1. Симлинками не пользуемся. По поводу будущий статьи, в связи с переездами сервера, пока руки не дошли. Сделал только деплой и бекап. Очень интересен ваш опыт по TeamCity, даавйте спишемся по мылу или скайпу. Буду ждать письма или сообщения)

Leave a Comment