Что такое хороший процесс сборки CI

Если вы хотите, чтобы структура имела определенный размер с GCC, например, используйте __attribute__((packed)) .

В Windows вы можете установить выравнивание в один байт при использовании cl .exe компилятор с опцией / Zp .

Обычно ЦП получает доступ к данным, который является кратным 4 (или 8), зависящей от платформы, а также от компилятор.

Итак, это вопрос выравнивания в основном.

У вас должны быть веские причины для его изменения.

12
задан Claus Thomsen 19 September 2008 в 15:31
поделиться

8 ответов

Хорошо "это зависит" :)

Мы используем нашу систему CI для:

  1. сборка и модульный тест
  2. развернитесь к единственному полю, запустите тесты intergration и кодируйте analisys
  3. развернитесь к лабораторной среде
  4. выполните приемочные испытания в подобной напоминанию системе
  5. отбросьте сборки, которые передают отбрасыванию кода для развертывания напоминания

Это для проекта нового строительства приблизительно дюжины сервисов и баз данных, развернутых на 20 + серверы, которые также имели зависимости от полудюжины других 'внешних' сервисов.

Используя инструмент CI для развертывания продукта на продуктивной среде как реалистическая цель? снова... "это зависит"

Почему Вы хотели бы сделать это?

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

Некоторые технические вещи, к которым необходимо обратиться, прежде чем можно будет ответить на это:

  • каковы требования времени работы для Вашей системы - Вам разрешают иметь время простоя, или она должна возрасти на 24/7?
  • у Вас есть процессы контроля изменений на месте, которые требуют человеческого вмешательства/одобрения?
  • действительно ли Ваше развертывание достаточно надежно, чтобы какой-либо компонент откатывал к известному - хорошее состояние, если развертывание перестало работать?
  • Ваша система разработана для обработки различных версий сервисов или клиентов в случае, если один или несколько сбоев развертывания компонента (и у Вас есть вышеупомянутый откат для длительности известной пользы)?
  • процесс имеет ум для обработки частичного развертывания, где компонент не может обработать смешанные версии своих зависимостей/клиентов?
  • как Вы вручаете базу данных, deployment/upgrades?
  • Вы имеете в распоряжении контроль, таким образом, Вы знаете, когда что-то идет не так, как надо?

Вот несколько недавних ссылок по теме об автоматизации и создании инструментов, в которых Вы нуждаетесь.

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

Теперь вот большой секрет... технические проблемы сложны, но не невозможны..., политические проблемы могут быть непреодолимыми. Все об этом стоит денег ли его dev время или покупающий решения других производителей. Таким образом, действительно можно ли создать $1 тысячу, $10 тысяч, $100 тысяч, или решение за $1 миллион?

Независимо от того, что решение, для которого Вы идете, удостоверяется, что автоматизация является устойчивой первой, полной секундой..., т.е. удостоверьтесь, что у Вас есть столь устойчивое решение, как Вы можете для получения развертывания на тестовой среде, а не хрупком решении, которое развертывается к производству.

14
ответ дан 2 December 2019 в 05:42
поделиться

CI не предназначается как механизм развертывания. Хорошо иметь Ваш CI, выполняют любое автоматизированное развертывание на QA/тестовом сервере, для обеспечения тех аспектов работы сборки, но я не использовал бы систему CI как Круиз-контроль или Бамбук как средства развертывания.

CI для создания кодовой базы периодически для автоматизации выполнения автоматизированных тестов, проверки кодовой базы через статический анализ и другие проверки той природы.

4
ответ дан 2 December 2019 в 05:42
поделиться

Убедитесь, что Вы понимаете идею позади сборки CI. CI обозначает Непрерывную Интеграцию, и сборки CI действительно предназначаются, чтобы быть одноразовыми сборками, которые выполняются, когда разработчик регистрирует код к системе управления исходным кодом (или в некотором указанном интервале), чтобы гарантировать, чтобы новейшие изменения не повреждали кодовую базу (следовательно идея непрерывной интеграции изменений в кодовой базе).

С этой целью технология, используемая для фактического серверного процесса сборки, в основном не важна по сравнению с тем, что на самом деле происходит во время сборки. Как @pdavis упомянутый, сборка CI должна скомпилировать кодовую базу, выполнить некоторый анализ кода (FxCop, StyleCop, Линт, и т.д.), выполнить модульные тесты и кодировать покрытие и выполнить любой другой пользовательский анализ, который Вы хотите выполненный, который должен повлиять на понятие "успешной" или "неудавшейся" сборки.

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

3
ответ дан 2 December 2019 в 05:42
поделиться

Я запускаю на новом проекте на работе, которой я действительно с нетерпением жду. Мы находимся все еще в начальной стадии проектирования и только что недавно завершили Логическую Архитектуру системы. Мы заказали новые серверы для тестирования и подготовки сред и настраиваем систему сборки Непрерывной интеграции (CI) на основе Круиз-контроля (http://cruisecontrol.sourceforge.net/) и MSBuild (http://msdn2.microsoft.com/en-us/library/wea2sca5.aspx), который является в основном улучшенным портом МУРАВЬЯ. Кажется, что проект Visual Studio 2005 года и файлы решения - все теперь в формате MSBuild. Круиз-контроль будет автоматически вытягивать источник из Визуального Безопасного Источника (хорошо, это не Подверсия, но мы можем иметь дело), компилируя его, и затем выполнение его через fxCop (http://www.gotdotnet.com/Team/FxCop/), nUnit (http://www.nunit.org/), nCover (http://ncover.org/site/), и продержитесь, но не арендуйте Человекообразную обезьяну (http://www.redhillconsulting.com.au/products/simian/). Круиз-контроль имеет довольно хороший интерфейс веб-сайта для отображения всех скомпилированных результатов различных инструментов и может даже отобразить изменения кода от одной сборки до следующего. Это также отслеживает все сборки в истории сборки. Я с нетерпением жду разработки через тестирование и думаю, что этот тип подхода, объединенного с nUnit/nCover, должен дать нам довольно хорошую идею, прежде чем мы развернем изменения, что мы ничего не повредили. Существуют также планы включить некоторый тип автоматизированного пользовательского интерфейса, тестирующего, после того как мы далеко достаточно приезжаем в проекте. В зависимости от инструмента это должно быть просто вопросом установки инструмента на сервере сборки и вызове его от Круиз-контроля. Сладкий.

2
ответ дан 2 December 2019 в 05:42
поделиться

Хороший процесс CI будет иметь полное или почти полное покрытие модульного теста. Модульные тесты тестируют классы и методы, по сравнению с интеграционными тестами, которые тестируют несколько частей системы. Когда Вы настраиваете свои сборки CI, сделали, чтобы они автоматизировали модульные тесты. Тем путем сборки CI могут работать многократно в день. Мы имеем, наши устанавливают для выполнения каждые 2 часа.

У Вас могут быть более длинные рабочие сборки, которые работают однажды в день. Они могут использовать другие сервисы и выполнить интеграционные тесты.

2
ответ дан 2 December 2019 в 05:42
поделиться

Я следил за презентацией ThoughtWorks (создатели Круиз-контроля), и они на самом деле решили эту проблему. Их ответ - то, что НИКАКОЕ развертывание не слишком сложно для тестирования. Почему? Поскольку иначе, Ваши клиенты становятся Вашими тестерами, который является точно, где Вы не хотите быть.

Если Вы имеете сложную структуру развертывания, настраиваете сервер визуализации. Имейте его, симулируют быть всеми системами, с которыми необходимо говорить. Они могут всегда запускать в известном хорошем состоянии, потому что можно сбросить к чистому изображению.

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

1
ответ дан 2 December 2019 в 05:42
поделиться

Чем позже ошибка обнаружена, тем более дорогостоящее это для фиксации. Таким образом, ошибки должны быть обнаружены как можно раньше. Это - мотивация позади CI.

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

CI не заменяет надлежащую дисциплину QA. Кроме того, CI не должен быть очень всесторонним в день один из проекта. Можно запустить с простого процесса CI, который делает основную компиляцию и поблочное тестирование первоначально. Поскольку Вы обнаруживаете больше классов ошибок в QA, необходимо адаптировать процесс CI, чтобы попытаться поймать будущие случаи тех ошибок. Это может также включить статические проверки анализа кода, так, чтобы можно было реализовать последовательное кодирование и разработать идеалы через кодовую базу.

1
ответ дан 2 December 2019 в 05:42
поделиться

Достаточно хорош хороший хороший процесс сборки CI когда его автоматизированный к QA и руководству оттуда?

Я думаю, то "ручное" развертывание используется, когда у человека с ролью инженера развертывания есть страх, что что-то после развертывания может пойти не так, как надо. У него нет уверенности в надежности инструментов развертывания и устойчивости.

Этот подвиг может уйти с тестированием процесса автоматизированного развертывания на подобной напоминанию среде. Это также должно протестировать механизм отката после развертывания.

Когда это функционирует, тестируются достаточно, Вы завоюете доверие в этом процессе и инструменте, который Вы используете.

0
ответ дан 2 December 2019 в 05:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: