Winforms ConnectionString и TeamCity - PullRequest
       6

Winforms ConnectionString и TeamCity

2 голосов
/ 28 апреля 2011


Мы начинаем новый проект WinForms и решили использовать TeamCity для создания сборок и запуска модульных и интеграционных тестов.Проект имеет дело с базой данных.У нас есть 3 базы данных (developDB (это используется разработчиками при разработке =)), testDB (это используется teamcity для запуска тестов) и productionDB (это используется клиентом)).TeamCity имеет 3 buildConfiguration.Первый срабатывает, когда происходит коммит.Второй запускается каждую ночь для запуска интеграционных тестов.И третий запускается разработчиком, когда мы делаем релиз.Поэтому я хочу, чтобы TeamCity мог изменять connectionString в зависимости от типа сборки.Также я не хочу хранить connectionString в app.config (я не хочу, чтобы клиент знал пользователя и пароль).Какие варианты доступны для выполнения задачи?
Заранее спасибо!
Обновлено
Я использую NHibernate и FluentNHibernate для подключения к базам данных, если это важно.

Ответы [ 3 ]

0 голосов
/ 01 мая 2011

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

Получив символы, вы можете делать такие вещи:

#if DEVBUILD
//.... Your Connection String Code here
#endif

#if INTBUILD
.... Your Connection String Code here
#endif

Это ответ на ваш первый вопрос.

Глядя на вторую часть вашего вопроса, где вы не хотите хранить имя пользователя и пароль в app.config,

Параметры:

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

В этой ситуации я бы использовал TeamCity для запуска сценария nant для выполнения сборки.

NAnt позволяет изменять значения файла конфигурации (например, строку подключения) во время сборки.

Пример использования TeamCity / NAnt для развертывания в различных промежуточных средах можно найти в этом блоге: http://thecodedecanter.wordpress.com/2010/03/25/one-click-website-deployment-using-teamcity-nant-git-and-powershell/

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

0 голосов
/ 30 апреля 2011

Я не использовал TeamCity, но я написал несколько приложений с динамически меняющимися ConnectionStrings во время входа в систему (т. Е. Во время выполнения), и это довольно просто.

Вы не сказали, как вы подключаетесь кваша база данных.Поскольку вы упоминаете app.config, я полагаю, что это ADO.NET DataSets или simmilar технология, которая создает только для чтения (getter) ConnectionString в вашем Settings.Designer.cs / app.config.

То, что я сделал, было создать метод setter в Settings.cs (не Settings.Designer.cs) для свойства ConnectionString, например:

public void setNorthwindConnectionString(String value) {
    this["NorthwindConnectionString"] = value;
}

Мой сгенерированный DataSet затем использует эту NorthwindConnectionString для доступаdata.

Вы можете использовать директивы препроцессора для условной установки вашей ConnectionString:

#if DEBUG
    Console.WriteLine("Mode=Debug"); 
    Settings.Default.setNorthwindConnectionString("(DebugDBConnectionString)");
#else
    Console.WriteLine("Mode=Release"); 
    Settings.Default.setNorthwindConnectionString("(ReleaseDBConnectionString)");
#endif

Вы также можете зашифровать строки подключения и скопировать нужный app.configво время события после сборки.

...