Автоматична збірка пакетів для joomla!

До того, як я почав працювати над поточним проектом, я не думав, що мені коли-небудь доведеться використовувати інструменти для автоматичного складання проектів. Адже працюю я виключно з інтерпретуються мовами, яким не потрібна компіляція. Однак, як виявилося, вони можуть бути корисними і при розробці на PHP, і особливо при роботі з Joomla!

Автоматична збірка пакетів для joomla!

Раніше, працюючи над будь-яким сайтом, я вносив необхідні правки в файли і базу даних на своєму локальному сервері, перевіряв чи все правильно працює, потім за допомогою ftp-клієнта і phpMyAdmin копіював файли і зміни бази на робочий сайт. Якщо я не пам'ятав, які саме файли я правил, а зазвичай так і трапляється, копіював все.

У поточному проекті роботи ведуться на локальному сервері, потім правки переносяться на тестовий, і тільки потім на робочий. Причому остання дія замовник повинен мати можливість виконувати самостійно. Рішення для цього в Joomla є - файли для розширень плюс упаковка всіх розширень в пакет. Таким чином замовник може оновити всі розширення виконавши всього одну дію. А що ж повинен зробити розробник? Для компонента треба скопіювати: адміністративну і фронтальну частини, папку з директорії media (раніше треба було копіювати ще й мовні файли, але використовуючи новий стандарт їх розміщення ви звільняєтесь від цього). Потім треба перемістити файл маніфесту з адміністративної папки в корінь і все заархівувати. Ще, бажано, в імені архіву вказати номер версії. Коли все розширення зібрані, упакувати їх все і файл маніфесту пакета в один архів. Начебто нічого складного, але тільки поки розширень небагато. А якщо їх більше десятка (в моєму випадку 21, і їх кількість зростає)? А що якщо час від часу необхідно оперативно внести правки і передати оновлений пакет?

Ось тут-то я і перейнявся питанням автоматичного складання. На той момент я знав тільки про Ant. Почавши вивчати його можливості, дізнався ще про Maven. Але мене бентежило, що якщо раптом мені не вистачить наявних можливостей, доведеться писати на Java. Тому я продовжив пошуки і знайшов Phing - складальник проектів для PHP. Ознайомившись з його можливостями я швидко зрозумів, що в ньому є все необхідне:

  • операції з файлами і директоріями;
  • робота з архівами;
  • читання властивостей з xml-файлів (можна використовувати дані з маніфесту);
  • операції для роботи з системами контролю версій (cvs, svn, git);
  • підтримка протоколів ftp і http;
  • виконання зовнішніх команд;
  • виконання PHP-коду;
  • запуск юніт-тестів;
  • робота з базою даних;
  • багато інших можливостей які розширюються за допомогою готових або саморобних плагінів на PHP.

установка Phing

Найпростіше встановити Phing використовуючи PEAR. Для цього достатньо в консолі ввести всього дві команди:

Якщо ви не використовуєте PEAR, то на офіційному сайті є інструкцію, як встановити Phing вручну.

Підключення до NetBeans

Наступний крок після установки - підключення до використовуваної IDE. Я використовую NetBeans, для нього існує плагін phingKing для запуску завдань з IDE. Починаючи з версії 7.3 його можна встановити безпосередньо з менеджера плагінів. У більш ранніх версіях доведеться попередньо завантажити плагін і встановити з файлу.

Після установки в розділі меню Вікна з'явиться пункт Phing Targets. В цьому вікні будуть відображатися завдання Phing:

  • Favorites - обрані завдання;
  • Subtargets - підзадачі (завдання виконання яких включено в більш загальну задачу);
  • Default target - завдання за замовчуванням.

В налаштуваннях NetBeans в розділі PHP з'явитися закладка PhingKing в якій має бути вказано шлях до Phing. У властивостях проекту у відповідному розділі необхідно вказати шлях до xml-файлу з завданнями (про це трохи нижче).

Використання з командного рядка

Використовувати Phing з командного рядка також просто. Додайте завдання у файлі build.xml і запустіть скрипт Phing в тій же директорії, або вкажете шлях до xml-файлу в параметрі -buildfile. Отримати повний набір параметрів можна запустивши phing -help.

створення завдань

Завдання для Phing записуються в xml-файл (за замовчуванням build.xml). За замовчуванням запускається тільки одна задача зазначена у властивостях проекту як default, але в ній можна вказати залежності від інших завдань, кожна з яких також може мати свої залежності, і всі вони будуть виконані. Весь проект полягає в тег project, а кожна задача в тег target.

Найпростіший файл завдань виглядає так:

В результаті буде виведено:

Збірка розширень Joomla

Тепер змусимо зробити Phing щось корисне - зібрати пакет з розширеннями для Joomla.
Вихідні умови:

  • розробка ведеться в директорії / opt / lampp / htdocs / mysite
  • готовий пакет помістимо в / home / user1 / mysite
  • вихідні файли розширень в / home / user1 / mysite / src
  • файли розширень з номерами версій в / home / user1 / mysite / zip
  • файли розширень без номерів версій в / home / user1 / mysite / cache

Примітка: файли з номерами версій зручно використовувати як самостійні, а без номерів для спрощення збірки пакета.

На перший погляд виглядає трохи страхітливо, але насправді тут немає нічого складного. Для більшості розширень код можна копіювати лише з невеликими змінами. Та й правити його доводиться вкрай рідко. Зате всього в один клік ми отримуємо пакет з актуальними версіями всіх розроблюваних розширень.

Схожі статті