Налаштування циклу розгортання / складання / ІС для проектів PHP


200

Я більшу частину свого часу я самотній розробник, працюючи над низкою великих, в основному, проектів на базі PHP. Я хочу професіоналізувати та автоматизувати, як обробляються зміни в кодовій базі, і створити процес безперервної інтеграції, який робить можливим перехід до роботи в команді без необхідності кардинальних змін.

Що я зараз роблю, це те, що я маю місцеве тестове середовище для кожного проекту; Я використовую SVN для кожного проекту; зміни тестуються локально, а потім переносяться в он-лайн версію, як правило, через FTP. Документація API генерується вручну з вихідного коду; Одиничні тести - це те, до чого я потрапляю повільно, і це ще не є частиною мого розпорядку дня.

Я передбачаю, що цикл "побудови" виконає наступне:

  • Набір змін перевіряється у SVN після тестування на місцях.

  • Я запускаю процес збирання. Версія SVN HEAD перевіряється, при необхідності змінюється та готується до завантаження.

  • Документація API генерується автоматично - якщо я ще не налаштував її детально, використовуючи шаблон за замовчуванням, скануючи всю базу коду.

  • Нова редакція розміщена у віддаленому місці за допомогою FTP (включаючи перейменування каталогів, chmodding, імпорт баз даних тощо). Це те, що я вже дуже люблю phing , але я відкритий для альтернатив, звичайно.

  • Проводяться одиничні випробування, що знаходяться у заздалегідь визначеному місці. Мені інформують про їхній збій або успіх за допомогою електронних повідомлень електронної пошти, RSS або (бажано) виводу HTML, які я можу захопити та розмістити на веб-сторінці.

  • (необов'язково) текстовий файл "змін журналу" кінцевого користувача у заздалегідь визначеному місці оновлюється заздалегідь визначеною частиною повідомлення про фіксацію ("Тепер можна фільтрувати і" foo ", і" bar "одночасно час). Це повідомлення не обов'язково тотожне повідомленням фіксації SVN, яке, ймовірно, містить значно більше внутрішньої інформації.

  • Такі речі, як метрика коду, перевірка стилю коду тощо, зараз не є моєю основною увагою, але в довгостроковій перспективі вони, безумовно, будуть. Рішення, які приносять цей нестандартний комплект, дуже доброзичливо розглядаються.

Шукаю

  • Відгуки та досвід людей, які опинилися або опинилися в подібній ситуації, і успішно реалізували рішення для цього

  • Особливо, хороші покрокові підручники та посібники, як це налаштувати

  • Рішення, що забезпечують максимальну автоматизацію , наприклад, створення API скелетів, тестові кейси тощо для кожного нового проекту.

і також

  • Рекомендації по вибору . Я знаю поки що phing / ant for building та phpUnderControl або Hudson для звітної частини. Мені подобаються всі вони, наскільки я бачу, але я, звичайно, не маю детального досвіду з ними.

Я завалений роботою, тому маю сильну схильність до простих рішень. З іншого боку, якщо функція відсутня, я буду плакати за її занадто обмеженість. :) Точкові та клікні рішення також вітаються. Я також до рекомендацій щодо комерційних продуктів, які можуть працювати з проектами PHP.

Моя установка

Я працюю над Windows локально (точніше 7), і більшість клієнтських проектів виконуються на стеку LAMP, часто на спільному хостингу (= відсутність віддаленого SSH). Я шукаю рішення, які можу запустити у власному середовищі. Я готовий створити для цього Linux VM, без проблем. Розміщені рішення для мене цікаві лише в тому випадку, якщо вони містять усі описані аспекти або є досить гнучкими для взаємодії з іншими частинами процесу.

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

Відповіді:


76

Я пройшов через buildbot , CruiseControl.net , CruiseControl та Hudson . Незважаючи на те, що CruiseControl * мені дуже сподобався, це було занадто багато клопоту з дійсно складними випадками залежності. налаштувати buildbot непросто, але у нього є приємна аура (мені просто подобається python, ось і все). Але Хадсон переміг за попередньою трійкою, оскільки:

  1. Це просто просто налаштувати
  2. Це легко налаштувати
  3. Це добре виглядає та отримав хороший огляд функціональності
  4. Він отримав оновлення для кожного і всіх встановлених плагінів. Це дійсно приємна особливість, яку я ціную все більше і більше

Caveat: Я тільки коли-небудь використовував linux в якості бази для вищезгаданих серверів збирання (CC.net працював на моно ), але всі вони, згідно з документами, повинні працювати на крос-платформах.

Налаштування сервера Хадсон

Передумови:

  • Java (1,5 буде служити вам просто чудово)
  • Читати доступ до сервера підривної роботи (у мене є окремий обліковий запис для користувача hudson)

Звідси просто:

java -jar hudson.war

Це запустить невеликий екземпляр сервера одразу від вашої консолі, і ви повинні мати можливість переглядати встановлення у себе http://localhost:8080, якщо у вас заздалегідь нічого іншого не працює на цьому порту (ви можете вказати інший порт, передавши --httpPort=ANOTHER_HTTP_PORTпараметр у вище команда), і все пройшло добре в процесі "встановлення".

Якщо ви перейдете до доступного каталогу плагінів ( http://localhost:8080/pluginManager/available), ви знайдете плагіни для підтримки вищезгаданих завдань (підтримка субверсії встановлена ​​за замовчуванням).

Якщо це викликає у вас апетит, вам слід встановити сервер додатків java, наприклад, tomcat або jetty . Інструкції з установки доступні для всіх основних серверів додатків

Оновлення : Kohsuke Kawaguchi створив інсталятор служби Windows для Хадсона

Створення проекту в Гудзоні

Посилання в наступному проході передбачає запущений екземпляр Гудзона, розташований у http://localhost:8080

  1. Виберіть нову роботу ( http://localhost:8080/view/All/newJob) у меню зліва
  2. Дайте завдання імені та позначте Build a free-style software projectу списку
  3. Якщо натиснути "ОК", ви перейдете на сторінку конфігурації завдання. На всіх варіантах крім них є невеликий знак питання. Якщо натиснути це, з'явиться текст довідки щодо опції.
  4. У групі опцій "Управління вихідним кодом" ви б використовували Subversion. Хадсон приймає як доступ до URL, так і доступ до локального модуля
  5. У групі опцій "Збірка тригерів" ви використовуєте "Опитування SCM". Синтаксис, що використовується тут, - це син, тож опитування підривного сховища кожні 5 хвилин було б*/5 * * * *
  6. Процес побудови проекту визначений у групі опцій «Побудувати». Якщо у вас вже є файл збірки мурашок з усіма необхідними цілями, вам пощастить. Просто виберіть "Викликати мурашку" та напишіть ім'я цілі. Група опцій також підтримує команди maven та shell, також поза межами вікна, але також існує плагін для phing .
  7. Відмітьте додаткові дії зі збірки в "Опублікувати дії по збірці", такі як повідомлення електронною поштою або архівування артефактів збірки.

Для налаштування процесів, для яких Хадсон не має плагінів, ви можете або зателефонувати їм безпосередньо через скрипт оболонки з установки збірки, або ви зможете написати власний плагін

Підводні камені:

  • Якщо ви створюєте артефакти для збирання, пам’ятайте, що Гудзон прибирає після себе регулярно.
  • Якщо у вас створено більше 20 проектів, подумайте, чи не відображати їх стан збірки як головну сторінку за замовчуванням на hudson

Удачі!


2
Я думаю, що у вашому синтаксисі cron є помилка. Це буде працювати на п'ятій хвилині кожної години. Якщо ви хочете опитувати репо кожні 5 хвилин, вам потрібно буде скористатися * / 5
Brian Wigginton,

2
@BrianWigginton: ви абсолютно праві. І я навіть намагався виправити публікацію, але не можу її зберегти, оскільки у мене є "посилання на недійсне ім'я хоста", а саме "localhost". Я сподіваюся, що люди дивляться сюди на виправлення.
Стін

22

Термін, який ви шукаєте, - це "безперервна інтеграція".

Ось приклад того, хто використовує GIT + phpundercontrol: http://maff.ailoo.net/2009/09/continuous-integration-phpundercontrol-git/

CruiseControl (це сервер CI) може використовувати хостинг SVN / GIT як джерело. Таким чином, ви навіть можете використовувати його з GitHub або Beanstalk або ще чимось іншим.

Тоді ви можете інтегрувати це з наступним видом програмного забезпечення:

  • PHPUnit
  • php-codeniffer
  • phpdocumentor
  • PHP Gcov
  • PHPXref
  • Яська
  • тощо.

Ви також можете спробувати цей розміщений CI: http://www.php-ci.net/hosting/create-project

Майте на увазі, що ці інструменти потребують спеціальної підтримки, якщо ви їх інтегруєте самостійно.

Ви також думали про управління проектами та управління патчами?

Ви можете використовувати Redmine для управління проектами. Він має інтегровану підтримку безперервної інтеграції, але лише як клієнтську сторону (не як сервер CI).

Спробуйте використовувати розміщений SVN / GIT / тощо. рішення, оскільки вони покриватимуть ваші резервні копії та підтримуватимуть роботу серверів, тож ви можете зосередитись на розробці.

Довідник про те, як налаштувати Хадсон, дивіться на веб-сайті: http://toptopic.wordpress.com/2009/02/26/php-and-hudson/


2
Дякуємо за посилання Мені знайомі товари, на які я сподіваюсь, - це більше посібників, як у тому, що ви надали.
Pekka

Привіт, станом на жовтень 2012 р. Php-ci.net знищений або вже знятий із служби? Я не можу підключитися до цієї адреси, і не можу знайти нову інформацію за минулий рік.
Райан

@ Райан, я не знаю, що сталося. Я знаю, що ви можете спробувати інші. Можливо, ви можете спробувати: CircleCI або ви можете перевірити цю тему: Хостинг безперервної інтеграції для PHP?
Міхель

@ Райан, ні це не вниз, я використовую це вже деякий час. Вони перейшли на phptesting.org
омрахур

6

Я використовую безперервний інтеграційний сервер Bamboo Atlassian для свого головного проекту PHP (разом з іншими продуктами, такими як риб’яче око (перегляд сховищ), jira (трекер випуску) та конюшина (покриття коду)).

Він підтримує SVN і тепер підтримує Git, і він має чудовий інтерфейс користувача. Він доступний для Linux, Windows та Mac і може працювати окремо на власному сервері tomcat, що чудово підходить людям (як я), які не люблять витрачати дні на налаштування своїх інструментів). Хоча це може виглядати дорого, будучи самотнім розробником, я придбав ліцензію на стартерний комплект за 10 $ (10 $ за програмне забезпечення). Це чудово підходить для невеликих команд, і це варто подивитися.


Як можна налаштувати бамбук для підтримки фінгу? В даний час я використовую мурашник, але, здається, фінг більш доцільний для використання для знімання php. Дякую
Вінсент

5

PHPTesting PHPCI Це хороший сервер безперервної інтеграції, вбудований у php.

Плюс його безкоштовний та відкритий код. :)

він має кількість плагінів ..

PHPCI включає плагіни інтеграції для:

  • Атум
  • Behat
  • Багаття
  • Кодецепція
  • Композитор
  • Електронна пошта
  • Грунт
  • IRC
  • PHP
  • Листя
  • MySQL
  • PDepend
  • PostgreSQL
  • PHP Sniffer Code
  • Детектор копіювання PHP / вставлення
  • Спеціальність PHP
  • PHP блок
  • Команди оболонки
  • Тар / Zip

Хоча мені подобається PHPCI, я не рекомендую його. Це неймовірно глючно і ненадійно. Прикро, що загальна основна функціональність не перевірена належним чином, тому базове, наприклад, додавання URL-адреси проекту, важке без його псування.
Тек

@Tek, яка ваша стратегія CI для PHP?
омрахур

1
@omrakhur Я, на жаль, застряг з PHPCI. Все інше програмне забезпечення настільки об'ємніше і потребує чимало налаштування. У всього є свої плюси і мінуси. Вам просто потрібно піти з тим, що найкраще підходить для вас.
Tek

3

Я здебільшого системний адміністратор, але іноді також кодую PHP. Як побічний проект я створив декілька сценаріїв, які дозволять просто та безболісно створити повне середовище PHP CI з використанням Дженкінса. Він також запускає зразок проекту для вас, щоб ви могли бачити, як налаштований кожен крок збирання.

Якщо ви хочете спробувати це все, що вам потрібно - це поле Debian / Ubuntu та доступ до оболонки.

http://yauh.de/articles/379/setting-up-a-ci-environment-for-php-projects-using-jenkins-ci

Оновити Щоб додати деякий вміст до моєї відповіді:

Ви можете просто встановити CI Jenkins для PHP за допомогою Ansible. Так як v1.4 він підтримує ролі, які ви можете завантажити з їхнього сайту спільноти galaxy.ansibleworks.com, і це зробить важкий підйом для вас. Його називають дженкінс-php .


3

Я б запропонував використовувати Дженкінс http://jenkins-ci.org/ це безкоштовно і це відкритий код.

Це досить просто вперед до налаштування, працює на декількох платформах і добре інтегрується з іншими інструментами безперервної інтеграції, такими як SonarQube (+ SQUALE) для вимірювання технічної заборгованості та Thucydides для автоматизації тестування.

Я б настійно пропонував використовувати GIT або GIT Hub для контролю версій замість SVN. З моєї точки зору, це просто краща система контролю версій, яка допоможе вам розширити свої зусилля з розробки пізніше.

Оскільки ви працюєте в основному з проектом PHP, є деякі інші інструменти, якими ви можете скористатися.

PHPUnit - для тестування одиниць

PHP CodeSniffer - перевірка стандартів кодування

PHP Depend - Показує залежності PHP-коду

XDEBUG - для тестування працездатності

Усі ці інструменти можуть спрацьовувати у роботі Дженкінса та допомагати в якості та роботі вашого коду.

Успіхів і насолоджуйтесь!


3

Я не використовую багато продуктів чи навіть типів продуктів, якими ви користуєтесь, але я передам вам свій досвід.

Я запускаю TEST-середовище паралельно моєму PROD-середовищу. У мене немає локальних тестувань. Якщо надмірно важко заспокоїти реальне TEST-середовище, то я виправляю процес збирання. Я не бачу сенсу в тестуванні локально, оскільки оточення різні. ОНОВЛЕННЯ: Єдине, що я роблю локально, це запустити "php -l", перш ніж щось завантажувати. Зупиняє дурні помилки.

Процес збирання працює з тим, що знаходиться в поточній робочій області, що включає непосланий код. Це не кожна чашка чаю, але я дуже часто ходжу на ТЕСТ. Все бере на себе зобов’язання перед тим, як перейти до PROD.

Частина мого процесу збирання (схожа на вашу) створює два файли META. Одна містить останні (зазвичай) 100 змін, а також дає мені поточний номер списку змін. Показує мені, які зміни встановлені. Інший містить CLIENTSPEC (з точки зору Perforce), який показує мені, які саме галузі використовувались у цій збірці. Разом вони дають мені відтворювані побудови.

Я будую не безпосередньо до цільового середовища, а до місця постановки на сервері. Я використовую SSH, тому це має сенс. Це дає мені кілька переваг. Найголовніше, щоб уникнути вмирання на півдорозі через велике завантаження. Це також дає мені місце для зберігання файлів META, і всі файли збирання автоматично архівуються (тому я можу повернутися прямо до будь-якої збірки). Сценарій також реєструє оновлення (тому в потоці журналу є запис, і я бачу до- і після-) і натискає всі демони (я використовую daemontools так "svc -t"). Все це краще на цільовій машині.

Ще одне питання - це зміни БД. Я зберігаю головний сценарій схеми БД, який я оновлюю щоразу, коли схема змінюється. Кожна зі змін також переходить у сценарій change.sql, який завантажується разом із збіркою в область постановки. Сценарій запускається як частина сценарію встановлення.


Дякую за ваш внесок Філ, це дуже, дуже цікава установка, і я думаю, що я можу використати частини цього. У моєму випадку, однак, я дуже часто не матиму SSH доступу до віддаленого кінця, тому мені потрібно багато "інтелекту" на місцях, саме тому я думаю, що мені знадобиться такий продукт CI, як Хадсон.
Pekka

2

Нещодавно я почав такий самий процес, і я використовую Beanstalk для хостингу svn.

У платних акаунтах є дві витончені функції (я думаю, починаючи з 15 вечора):

  • розгортання дозволяє користувачеві створювати ftp-цілі для постановочних та виробничих серверів, які можна розгортати одним натисканням кнопки (включаючи вказівку версії та гілки)
  • веб-гачки дозволяють користувачеві налаштувати URL-адресу, яка викликається під час кожного введення / розгортання, передаючи такі речі, як номер редакції, опис та користувач. Це можна використовувати для оновлення документів, запуску тестів одиниць та оновлення журналів змін.

Я впевнений, що є інші хостингові або хостингові сервери svn з цими двома можливостями, але beanstalk - це той, у кого я маю досвід, і він працює дуже, дуже добре

Також існує API, який, на мою думку, може бути використаний для подальшої інтеграції розгортання у ваш процес.


Привіт @adam. Я шукаю не стільки для розміщених служб для цього, скільки боюся, що вони завжди будуть занадто обмежені для того, що мені потрібно. Але те, що ви говорите, звучить цікаво, і API може бути сполучною точкою для решти. Я погляну на це.
Pekka

Не хвилюйтесь, думав, що ви можете це сказати. Наразі мені це підходить, так як я не зовсім власноруч маю голову svn (і я є командою для однієї людини), плюс вони пропонують повний експорт репо, якщо ви хочете переїхати.
Адам Хопкінсон

2

Розглянемо fazend.com , безкоштовну розміщену платформу CI, яка автоматизує процедури налаштування та встановлення. Вам не потрібно налаштовувати контроль версій, відстеження помилок, сервер CI, тестове середовище тощо. Все робиться на вимогу.


Ммм, це виглядає дуже цікаво! Але як вони виживають? Бачите, як все безкоштовно? Як вони платять за сервер та плату за E3?
Pekka

@Pekka Спонсором цього проекту є компанія з розробки програмного забезпечення, тому послуга безкоштовна
yegor256
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.