CI-friendly автоматические сборки для проектов as3/flex

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

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

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

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

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

Требования:

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

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

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

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

Я еще не видел тему, связанную с несколькими библиотеками/проектами и т.д.

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

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

Ответ 1

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

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

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

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

Изменить (сравнение с Buildr AS3 и Maven)

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

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

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

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

Ответ 2

Я хорошо знаком с использованием 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, эта часть действительно хороша). Также вы можете выполнять непрерывную интеграцию с помощью bamboo (или просто написать свой собственный script, который запускается из задания cron или в виде окон в виде пакетного файла, выполненного с запланированной задачей, если у вас нет сервера * nix). Дайте мне знать, если вы хотите получить более подробную информацию или если я пропустил что-то важное.

Шон

Ответ 3

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

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

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

Вот что я узнал:

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

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

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

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