Автоматизируйте веб-развертывание на удаленном сервере IIS

В настоящее время я занимаюсь исследованием и внедрением автоматического метода развертывания наших проектов MVC и webApi в производственной среде.

До сих пор я использовал инструмент публикации, встроенный в Visual Studio 2012, с хорошим эффектом. Запустив это в IDE, я могу получить правильные файлы и конфигурацию IIS и запустить их на рабочем сервере. Однако я хочу добиться того же, но через командную строку или powershell, чтобы можно было просто запустить скрипт, и он автоматически развернет 2 веб-сайта.

Я попытался сделать это, запустив скрипт командной строки, например:

msbuild MyProject.csproj /p:DeployOnBuild=true;PublishProfile=MyProfile

и это создает проект и создает пакет в папке obj проекта. Является ли это правильным подходом, и если да, то как я могу автоматически развернуть этот пакет на удаленном сервере?


person Thewads    schedule 11.02.2013    source источник
comment
любое окончательное решение с полным образцом исходного кода, работающим над этим?   -  person Kiquenet    schedule 30.04.2013


Ответы (1)


Вот функция, которую я использую всякий раз, когда мне нужно развернуть веб-приложение:

function MSBuild-Publish-Web-Service
{
    param (
        [parameter(Mandatory = $true)][string] $WebProjectFile,
        [parameter(Mandatory = $true)][string] $DestinationDir
    )

    Write-Host "`t`t$($MyInvocation.InvocationName): Publishing web service from $SourceDir"

    try
    {
        $Error.Clear()
        $MsBuildPath = "$env:Windir\Microsoft.NET\Framework\v3.5\MSBuild.exe"

        if (!(Test-Path $MsBuildPath))
            { throw "Could not find $MsBuildPath" }

        $res = [string](. $MsBuildPath "$WebProjectFile" /verbosity:minimal "/t:ResolveReferences;_CopyWebApplication;publish" /p:Configuration=Debug /p:OutDir="$DestinationDir\bin\" /p:WebProjectOutputDir="$DestinationDir")

        if ($res.Contains("error"))
            { throw $res }
    }

    catch
    {
        Write-Error "`t`t$($MyInvocation.InvocationName): $_"
    }

    Write-Host "`t`t$($MyInvocation.InvocationName): Web service published"
}
person David Brabant    schedule 11.02.2013