0

負荷分散された環境でホストされている Web サイト プロジェクトを使用したソリューションがあります。現時点では CI は使用されておらず、デプロイは zip ファイルを使用して手動で行われています >_< しかし、セットアップを検討していて、いくつかの問題に遭遇しました。このソリューションには、サイトのすべての構成をルートに含む App_Config フォルダーが必要ですが、これらの構成は、1 つが管理サーバーで、もう 1 つが配信サーバーである各ホスティング サーバーとは異なります。

個々のサーバー構成は、web.config ファイルと App_Config フォルダーを含む /Configs/servername/ の個別のフォルダーに格納されます。これらは、このフォルダーからルートに手動でコピーされ、既存のものを上書きします。また、/Configs/ フォルダーの展開は望ましくありません。

できれば、Visual Studio ソリューションに変更を加える必要はありません。

TeamCity にデプロイする前にこれを自動化することはできますか?

よろしく

4

1 に答える 1

0

コンピュータ名に基づいて、異なる値でプロパティを設定したい場合があります。それが商売のコツです。

<Choose>
    <When Condition=" '$(Computername)'=='MyManagementServer01' ">               
        <PropertyGroup>
            <MyCustomProperty001>Red</MyCustomProperty001>
            <MyCustomProperty002>Yellow</MyCustomProperty002>
        </PropertyGroup>
    </When>

    <When Condition=" '$(Computername)'=='MyDeliveryServer01' ">

        <PropertyGroup>
            <MyCustomProperty001>Black</MyCustomProperty001>
            <MyCustomProperty002>White</MyCustomProperty002>
        </PropertyGroup>

    </When>

    <Otherwise>

        <PropertyGroup>
            <MyCustomProperty001>NoMatchMyCustomProperty001</MyCustomProperty001>
            <MyCustomProperty002>NoMatchMyCustomProperty002</MyCustomProperty002>
        </PropertyGroup>        

    </Otherwise>

</Choose>

というプロパティを設定できます

<ConfigurationSourceFolder>/Configs/MyManagementServer01/</ConfigurationSourceFolder>

または、「DeploymentType」をセットアップします

<DeploymentType>ManagementServerType</DeploymentType>

「ターゲット」やタスクに条件を付けることもできます。

<MakeDir Directories="C:\MyCoolDirectory" Condition="('$(MyCustomProperty001)'!='')"/>

//////できれば、Visual Studio ソリューションに変更を加える必要はありません。//////

そこで、ここに「一般的な」ヒントを示します。csprojファイルに、時には従うのが難しいカスタム変更をたくさん入れる代わりに....基本的な.msbuildファイルを使用してください。

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="AllTargetsWrapped">
    <PropertyGroup>
        <!-- Always declare some kind of "base directory" and then work off of that in the majority of cases  -->
        <WorkingCheckout>.</WorkingCheckout>
    </PropertyGroup>

    <Target Name="AllTargetsWrapped">

        <CallTarget Targets="BuildItUp" />

    </Target>


    <Target Name="BuildItUp" >
        <MSBuild Projects="$(WorkingCheckout)\MySolution.sln" Targets="Build" Properties="Configuration=$(Configuration)">
            <Output TaskParameter="TargetOutputs" ItemName="TargetOutputsItemName"/>
        </MSBuild>
        <Message Text="BuildItUp completed" />
    </Target>

</Project>
于 2013-10-01T13:43:06.957 に答える