Замена кода подключения тестовой базы данных в качестве шага после сборки - PullRequest
0 голосов
/ 15 сентября 2010

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

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

Как это можно сделать?Я использую Hudson в качестве CI-сервера, если это помогает, и использую GitHub для SCM.

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

Ответы [ 2 ]

0 голосов
/ 15 сентября 2010

Windows

Так как у меня нет powershell: я реализовал поиск и замену на основе этого сообщения в блоге . Помните о некоторых ограничениях этого подхода.

Linux / Unix

Узнайте, как использовать sed ( man-страницы ). Если у вас есть Cygwin, вы также можете использовать sed.

0 голосов
/ 15 сентября 2010

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

Эффективно егопоиск и замена.

Ниже приведен фрагмент для изменения файла веб-конфигурации .NET, но то же самое можно сделать для других файлов конфигурации на основе xml.

$Config = (Get-Content -Path <Path to web.config>) -as [xml]
@(
    @{ 
        xpath = '/configuration/appSettings/add[@key="Setting1"]'
        edit = { $_.value = <Setting1 value> } 
    },
    @{ 
        xpath = '/configuration/connectionStrings/add[starts-with(@name, "ConnString")]'
        edit = { $_.connectionString = "Data Source=<servername>;Initial Catalog=NorthWind;Integrated Security=SSPI" } 
    }
) | 
    ForEach-Object {
        $Config.SelectNodes($_.xpath) |
            ForEach-Object -Process $_.edit
    }
$Config.Save(<path to web.config>)
...