Подтвердить что ты не робот

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

Что представляет собой хороший процесс сборки CI?

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

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

4b9b3361

Ответ 1

Ну "это зависит":)

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

  • build и unit test
  • развертывание в одном окне, запуск тестов интеграции и анализ кода
  • развертывание в лабораторной среде
  • запустить приемочные испытания в prod-подобной системе.
  • кадры, которые переходят на падение кода для развертывания prod

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

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

Зачем вам это нужно?

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

Некоторые технические вопросы, которые вы должны решить, прежде чем вы сможете ответить на этот вопрос:

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

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

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

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

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

Ответ 2

CI не предназначен как механизм развертывания. Хорошо, чтобы ваш CI выполнял любое автоматическое развертывание на сервере QA/Test, чтобы гарантировать, что эти аспекты вашей сборки работают, но я бы не использовал систему CI, такую ​​как Cruise Control или Bamboo, как средство развертывания.

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

Ответ 3

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

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

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

Ответ 4

Я начинаю работу над новым проектом, который я действительно с нетерпением жду. Мы все еще находимся на начальной стадии проектирования и недавно завершили архитектуру логической системы. Мы заказали новые серверы для тестовых и промежуточных сред и создаем систему построения непрерывной интеграции (CI) на основе Cruise Control (http://cruisecontrol.sourceforge.net/) и MSBuild (http://msdn2.microsoft.com/en-us/library/wea2sca5.aspx), который в основном является улучшенным портом ANT. Похоже, что проект и файлы решений Visual Studio 2005 теперь находятся в формате MSBuild. Круиз-контроль будет автоматически вытаскивать источник из Visual Source Safe (нормально, это не Subversion, но мы можем справиться), компилируем его, а затем запускаем через fxCop (http://www.gotdotnet.com/Team/FxCop/), nUnit (http://www.nunit.org/), nCover (http://ncover.org/site/), и последний, но не аренда Simian (http://www.redhillconsulting.com.au/products/simian/). Круиз-контроль имеет довольно хороший интерфейс веб-сайта для отображения всех скомпилированных результатов из различных инструментов и может даже отображать изменения кода из одной сборки в другую. Он также отслеживает все сборки в истории сборки. Я с нетерпением жду разработки, основанной на тестах, и думаю, что этот тип подхода в сочетании с nUnit/nCover должен дать нам довольно хорошую идею, прежде чем мы внесем изменения, которые мы ничего не сломали. Также есть планы включить некоторый тип автоматизированного тестирования пользовательского интерфейса, когда мы будем достаточно далеко в проекте. В зависимости от инструмента это должно быть просто вопросом установки инструмента на сервере сборки и вызова его из Cruise Control. Сладкое.

Ответ 5

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

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

Ответ 6

Я смотрел презентацию ThoughtWorks (создатели Cruise Control), и они действительно решили эту проблему. Их ответ заключается в том, что развертывание НЕТ слишком сложно для тестирования. Зачем? Потому что в противном случае ваши клиенты станут вашими тестерами, и именно там, где вы не хотите быть.

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

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

Ответ 7

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

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

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

Ответ 8

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

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

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

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