Лучшие способы поддерживать непрерывную интеграцию? - PullRequest
4 голосов
/ 06 июля 2010

Я обнаружил, что всегда настраиваю и настраиваю нашу настройку CI по мере добавления новых проектов. Хотя нет никаких сомнений в том, что преимущества являются существенными для существующего кода, который редко изменяется, новые или нестабильные проекты, похоже, требуют больше работы, так как я должен настроить каждый проект на «интеграцию», а также поддерживать постоянно растущий CCNET.config. файл. Есть ли лучшая стратегия, кроме создания утилиты для управления добавлением и изменением настроек CI?

Ответы [ 2 ]

3 голосов
/ 06 июля 2010

Я делаю несколько вещей, чтобы попытаться держать его под контролем:

1) Разделить файл конфигурации на две части.У меня есть один файл, который в основном остается неизменным и содержит набор констант, например

<?xml version="1.0" encoding="utf-8"?>
<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
  <!-- Constant definition used by the projecct config to prevent changes being required for each iteration -->
  <cb:define branch="branch name for source control"/>
  <cb:define ciserver="Server name in here"/>
  <cb:define devenv="Path to DEVENV"/>
  <cb:define nunit="Path to NUNIT"/>
  <cb:define cruisecontrol="Cruisecontrol Path"/>

  <!-- Include file to the standard CI project definitions. This file is kept under source control -->
  <cb:include href="config\CCProjects.config"/>
</cruisecontrol>

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

См. документы

2) Храните файл с проектами в системе контроля версий.Файл проекта обновляется как часть проверки SVN.Это помогает отслеживать внесенные изменения и позволяет откатываться без особых хлопот.

Возможно, дело дошло до того, что CC.Net работает против вас, а не против вас.Я слышал хорошие отзывы о простоте настройки других CI-серверов, таких как Hudson , но, возможно, он не очень подходит для вашей среды сборки.

1 голос
/ 06 июля 2010

1 / Разбейте ваш конфигурационный файл, как вы хотите

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

ccnet.config

<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
  <!-- Shared constants -->
  <cb:define WorkingFolderBase="D:\dev\ContinuousIntegration\WC" />
  <cb:define ArtifactFolderBase="D:\dev\ContinuousIntegration\Artifact" />
  <cb:define ConfigFolder="projects" />
  <cb:define SvnBasePath="http://myserver.com/svn" />
  <cb:define SvnUsername="Myusername" />
  <cb:define SvnPassword="MyPassword" />

  <!-- MyProject1  -->
  <cb:include href="projects/MyProject1.config"/>

  <!-- MyProject2  -->
  <cb:include href="projects/MyProject2.config"/>
</cruisecontrol>

MyProject1.config

<project name="MyProject1" queue="Q1" queuePriority="1">
  <artifactDirectory>$(ArtifactFolderBase)\MyProject1</artifactDirectory>
  <workingDirectory>$(WorkingFolderBase)\MyProject1</workingDirectory>
  <!-- SVN implementation -->
  <sourcecontrol type="svn" username="$(SvnUsername)" password="$(SvnPassword)">
    <trunkUrl>$(SvnBasePath)/MyProject1/trunk/</trunkUrl>
    <workingDirectory>$(WorkingFolderBase)\MyProject1</workingDirectory>
  </sourcecontrol>
  [...]
</project>

2 / Использовать версиюуправление в CC.NET (я рекомендую для всей установки) или в файлах конфигурации.

3 / Упрощайте! все действия выполняются пакетным файлом (скомпилируйте приложение, скомпилируйте тесты, запускать тесты, получать покрытие, статический анализатор, генерировать отчеты ...).

...