CI-дружественные автоматизированные сборки для проектов as3 / flex - PullRequest
11 голосов
/ 27 января 2012

Отказ от ответственности : Я относительно незнаком с процессами сборки флэш-памяти, поэтому некоторые из них могут быть бессмысленными.Пожалуйста, не стесняйтесь предлагать альтернативные подходы.

В настоящее время мы разрабатываем гибкое веб-приложение, и наша ситуация со сборкой далека от идеальной.В настоящее время мы (как и у отдельных разработчиков) просто строим с использованием FlashBuilder и внедряем вручную.Программисты в настоящее время кричат ​​о кровавом убийстве по двум причинам:

  • Отсутствие CI похоже на возвращение к каменному веку
  • Мы не очень заботимся о FlashBuilder

(Примечание: мы используем только FlashBuilder, потому что это был самый простой способ настроить проект flex в сочетании с Away3d и правильно его построить / отрендерить - это временная задержкарешение).

Будучи преимущественно магазином для разработки .NET, мы привыкли к непрерывной интеграции и непрерывному развертыванию.В идеале мы хотели бы получить что-то похожее на это для наших флеш-проектов без привязки к конкретной IDE.

Требования:

Процесс сборки должен быть:

  • .. запускается из командной строки
  • .. запускается как на компьютерах разработчиков, так и на компьютерах сборки CI (и, конечно, не требует IDE!)
  • .. предпочтительно какIDE-независимый, насколько это возможно (хотя прагматизм включится; если это вызывает большие трения, мы просто выберем один).
  • .. в состоянии работать в Windows (мы разрабатываем с использованием Windows)

Мы не возражаем против дублирования или нескольких ручных шагов (например, если мы запускаем сценарии сборки, еслимы добавляем новый проект через IDE или генерируем одну конфигурацию из другой, если инструменты существуют), но чем меньше дублирования / обслуживания требуется, тем лучше.

Я прочитал довольно много статей / постов в блоге и посмотрел несколько коротких скринкастов, но большинство из них очень тонки в том, как система сборки находится рядом с IDE.Большинство статей / скринкастов имеют одну и ту же формулу: как создать сборку «Hello World» с использованием одного файла и текстовых редакторов (без IDE).

Я не видел темы о нескольких библиотеках / проектах и ​​т. Д.

Прочитав некоторое время об этой проблеме, я подумываю рассмотреть следующие варианты:

Есть ли у кого-нибудькакой-либо опыт вышеуказанных решений (или других, о которых я не знаю) и, если да, что вы о них думаете?Любая помощь / указатели приветствуются.

Ответы [ 3 ]

7 голосов
/ 28 января 2012

Я недавно начал строить с Gradle и плагином GradleFx , и я сразу влюбился в его мощь и простоту использования.

Gradle - это ANT + Maven+ Плющ эволюционировал и в основном используется из командной строки.Вы можете:

  • писать сценарии в Groovy (мощный Ruby-подобный язык, который работает на виртуальной машине Java)
  • получить доступ ко всем существующим Maven и Ivy репозитории , а также ваши собственные репозитории
  • использование существующих задач ANT
  • интегрируется с CI (в Jenkins вы просто ставите флажок, чтобы активировать поддержку Gradle)
  • , хотя он изначально вырос из сообщества Java / Groovy, на самом деле он не зависит от языка .Вы добавляете языковые плагины для дополнительной функциональности.GradleFx - это такой плагин, который предоставляет вам дополнительные задачи сборки ActionScript / Flex.
  • делает легкие мультипроектные сборки.Например, вы можете скомпилировать, выполнить модульное тестирование, упаковать и развернуть как сервисный уровень .NET, так и ваше клиентское приложение Flex с помощью одной команды .
  • использовать соглашение по конфигурации :если вы будете придерживаться соглашений, ваши сценарии сборки будут чрезвычайно краткими
  • генерировать все виды отчетов: модульное тестирование, контрольные стили, codenarc, ...
  • генерировать Eclipse, IDEA или другие проекты IDE
  • все то, что я еще не обнаружил

И самое главное: это очень легко выучить.Я не знал Maven до того, как начал работать с Gradle, и смог получить многопроектную сборку с некоторыми настройками, работающими довольно быстро.

Edit (сравнение с Buildr AS3 и Maven)

Я могу сравнить это только с одним из упомянутых вами проектов: Buildr AS3 .Кажется, это начинается с философии, которая похожа на философию Грэдла. Но Я пытался использовать его около полугода назад и даже не смог заставить работать простое приложение "Hello World".Я отправил разработчику электронное письмо с просьбой о помощи: нет ответа.

По сравнению с GradleFx: у меня была небольшая дискуссия на форуме с разработчиком (по довольно философской теме, так как мне действительно не нужна была помощь, потому что это простоработал сразу).Он ответил через несколько минут.

Что касается Maven : (для чего это стоит) Я только взглянул на некоторые конфигурации, и они кажутся слишком сложными, когда я сравниваю их со скриптом Gradle.

Есть одна вещь, которую Maven делает, которую вы не можете сделать с GradleFx (пока).Он может вытащить правильный Flex SDK из репозитория Maven и построить против этого.С GradleFx вы должны иметь свой SDK, доступный локально.

4 голосов
/ 27 января 2012

Я хорошо знаком с использованием maven в качестве основного инструмента сборки и плагина flexmojos от Sonatype. Мой опыт был чем-то вроде американских горок с flexmojos. Maven абсолютно солидный, он работает все время без проблем, единственная проблема - плагин flexmojos, который сильно колебался между версиями. Если вы решите пойти по этому пути, убедитесь, что вы нашли источник для flexmojos, чтобы вы могли видеть, что ваши параметры конфигурации фактически делают с параметрами командной строки и т. Д. Для Flex 3.x flexmojos 3.x до 3.9 хорош и работает Что касается цели генерации файлов .project eclipse, то есть и mojo (плагин maven) для генерации файлов проектов intelliJ IDEA, а также другие. Если вы используете Flex 4, вы можете скомпилировать его с последней версией flexmojos 4.0RC2, но мне кажется, что цель создания свойств проекта flex / flashbuilder теперь исчезла (я не уверен, что это потому, что она была заменена другим плагином). вообще или в чем дело). Однако сборка с помощью maven и flexmojos действительно отвечает всем вашим целям, указанным выше (мы также используем его для построения нашего уровня обслуживания, поэтому в одной чистой установке mvn мы получаем банку, упакованную в войну, упакованную в ухо со всем сконфигурированным и swf, эта часть действительно хороша). Также вы можете выполнять непрерывную интеграцию с использованием бамбука (или просто написать свой собственный скрипт, который запускается из задания cron или в windows в виде пакетного файла, выполняемого с запланированной задачей, если у вас нет * nix-сервера). Дайте мне знать, если вы хотите узнать больше подробностей или я пропустил что-то важное.

Shaun

2 голосов
/ 28 января 2012

Я использую Hudson, теперь Jenkins , с Ant для автоматизированных сборок Flex и FlexUnit для тестирования. У Jenkins есть несколько действительно полезных плагинов для интеграции с Eclipse (и, следовательно, FDT или FlashBuilder), Jira, SVN, Git и т. Д., И это бесплатно. Кроме того, вы можете интегрировать сборку Ant в Maven сценарии, так что я обнаружил, что это хорошее и гибкое решение для всех целей, с которыми я сталкивался до сих пор.

Flex SDK поставляется с Задачами Ant , и написание даже сложных сценариев сборки Ant довольно просто - на самом деле, раньше я использовал Ant локально, и я мог повторно использовать свои существующие сценарии только с Несколько добавлены дополнительные опции компилятора для задач FlexUnit.

Тем не менее, потребовалось некоторое время, чтобы правильно настроить систему для модульного тестирования, потому что я запускаю сервер безголовый в Linux, и это создает довольно сложную среду для тестов ActionScript, потому что они запускаются только во Flash Player. Это, конечно, верно для всех сценариев CI, использующих FlexUnit, независимо от того, какой сервер вы используете.

Вот что я выучил:

  • FlexUnit требуется установленная отладочная версия Flash Player, но Adobe распространяет двоичные файлы только для стандартной версии в Linux. Поэтому компиляция из исходного кода была необходима, и, поскольку моя серверная система была сокращена до самого необходимого, потребовалось некоторое усилие, чтобы установить все правильные зависимости и заставить их работать.

  • Для правильной работы Flash Player необходимо оборудование: он использует графику, поэтому ему нужна графическая карта и звуки, поэтому ему нужна звуковая карта. На моем безголовом сервере это означало, что мне нужно было установить хост VNC, чтобы он вообще работал, и мне пришлось исключить любые тесты с использованием звуков (теперь они будут выполняться только на локальных машинах). Если кто-нибудь когда-нибудь сталкивался с эмуляцией рабочей звуковой карты для openSuSE, которую я мог бы использовать с клиентом VNC, - ты навсегда останешься моим героем!

  • Если вы установили асинхронные тайм-ауты в своих модульных тестах и ​​/ или вам нужно использовать setTimeout() для отправки отложенных вызовов процедур, убедитесь, что интервалы не слишком короткие - у меня возникли проблемы с тесты, которые работали нормально на любом локальном компьютере, но сломали сборку на сервере CI, потому что Flash Player значительно медленнее на клиенте VNC, чем на реальной видеокарте.

Я также нашел, что эта последняя проблема - полезный урок: критерии для модульных тестов не должны основываться на предположениях о производительности системы или, по крайней мере, быть достаточно терпимыми для успеха даже на медленной машине.

...