Управление сборкой / Лучшие практики непрерывной интеграции - PullRequest
10 голосов
/ 07 января 2009

Как ваша команда справляется со сборками?
Мы используем круиз-контроль, но (из-за недостатка знаний) мы сталкиваемся с некоторыми проблемами - Замораживание кода в SVN - Управление сборкой
В частности, как вы делаете доступным конкретный выпуск, когда код постоянно проверяется?

Как правило, вы можете обсудить, какие лучшие практики вы используете в управлении выпусками?

Ответы [ 5 ]

14 голосов
/ 07 января 2009

Я очень удивлен, что это не дубликат, но я не могу найти другой.

Хорошо, вот сделка. Это два отдельных, но связанных вопроса.

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

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

Вы решаете проблему предоставления определенной версии, сохраняя точную конфигурацию всех затронутых артефактов для каждой сборки, чтобы вы могли применить повторяемый процесс сборки к той конфигурации, которая была у вас. (Вот почему это называется «управление конфигурацией».) Обычные инструменты контроля версий, такие как git или subversion, предоставляют способы идентификации и именования конфигураций, чтобы их можно было восстановить; например, в SVN вы можете создать тег для конкретной сборки. Вам просто нужно хранить немного метаданных, чтобы вы знали, какую конфигурацию вы использовали.

Возможно, вы захотите прочитать одну из книг «Прагматический контроль версий», и, конечно, материал по CI и круиз-контролу на сайте Мартина Фаулера имеет важное значение.

5 голосов
/ 07 января 2009

Посмотрите на непрерывная интеграция: лучшие практики , от Мартина Фаулера.

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

[Изменено]

Мы используем круиз-контроль в качестве инструмента интеграции. Мы просто имеем дело с транком, который является основным хранилищем Subversion в нашем случае. Мы редко вытаскиваем новую ветвь для создания новых карточек историй, когда есть вероятность сложных конфликтов. Обычно мы извлекаем ветку для выпуска версии, создаем из нее сборку и передаем ее нашей группе тестирования. Тем временем мы продолжаем работу в багажнике и ждем отзывов от команды тестирования. После того, как все протестировано, мы создаем тег из ветви, который в нашем случае является логически неизменным. Таким образом, мы можем выпустить любую версию в любое время для любого клиента в случае. В случае ошибок в выпуске мы не создаем тег, мы исправляем вещи в ветке. После того, как все исправит и утвердит группа тестирования, мы объединяем изменения обратно в транк и создаем новый тег из ветви, специфичной для этого выпуска.

Итак, идея в том, что наши ветви и теги не участвуют в непрерывной интеграции напрямую. Слияние кода ветви с магистралью автоматически делает этот код частью CI (Continuous Integration). Обычно мы делаем только исправления для конкретного выпуска в ветках, так что я не думаю, что он действительно участвует в процессе CI. Напротив, если мы по каким-то причинам начинаем создавать новые сюжетные карточки в ветке, то мы не будем слишком долго отделять эту ветку. Мы пытаемся объединить его обратно в магистраль как можно скорее.

Точно

  • Мы создаем ветки вручную, когда планируем следующий выпуск
  • Мы создаем ветку для выпуска и исправляем ошибки в этой ветке в случае
  • Получив все хорошо, мы создаем тег из этой ветви, который является логически неизменным
  • Наконец, мы сливаем ветку обратно в ствол, если есть некоторые исправления / модификации
2 голосов
/ 07 января 2009

Управление релизами выходит далеко за рамки непрерывной интеграции.

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

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

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

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

  • серия развертывания на серверах омологации
  • полный цикл омологации / UAT (пользовательский приемочный тест)
  • нерегрессионные тесты
  • производительность / стресс-тесты
  • подготовительные работы (и параллельные прогоны)

перед окончательным выпуском в производство.

Опять "управление выпусками" гораздо сложнее, чем просто "непрерывная интеграция";)

0 голосов
/ 07 января 2009

Короче говоря: создайте ветку, скопированную из транка, и закажите / соберите свой выпуск в этой ветке на сервере сборки.

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

Я согласен с Чарли в том, чтобы иметь автоматическую, воспроизводимую сборку с нуля. Но мы не делаем все для "Непрерывной" сборки, только для выпусков Nightly, Beta, Weekly или Omega (GA / RTM / Gold). Просто потому, что некоторые вещи, такие как создание документации, могут занимать много времени, и для непрерывной сборки вы хотите быстро предоставить разработчику отзыв о результате сборки.

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

0 голосов
/ 07 января 2009

Вы можете использовать Team Foundation Server 2008 и Microsoft Studio Team System для контроля версий, ветвления и выпусков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...