Sdílet prostřednictvím


Nastavení obnovení balíčku pomocí Team Foundation Buildu

Tento článek obsahuje podrobný návod, jak obnovit balíčky jako součást sestavení Team Services pro správu verzí Gitu i Team Services.

I když je tento názorný postup specifický pro scénář použití visual studio Team Services, tyto koncepty platí také pro jiné systémy správy verzí a sestavení.

Platí pro:

  • Vlastní projekty MSBuild spuštěné v libovolné verzi SADY TFS
  • Team Foundation Server 2012 nebo starší
  • Vlastní šablony procesu sestavení Team Foundation migrované na TFS 2013 nebo novější
  • Sestavení šablon procesů s odebranými funkcemi obnovení NuGet

Pokud používáte Visual Studio Team Services nebo Team Foundation Server 2013 s šablonami procesu sestavení, probíhá automatické obnovení balíčků v rámci procesu sestavení.

Obecný přístup

Výhodou použití NuGetu je, že ho můžete použít, abyste se vyhnuli vrácení binárních souborů do systému správy verzí.

To je zvlášť zajímavé, pokud používáte distribuovaný systém správy verzí, jako je Git, protože vývojáři potřebují klonovat celé úložiště, včetně úplné historie, aby mohli začít pracovat místně. Vrácení binárních souborů do binárních souborů může způsobit významné blouzení úložiště, protože binární soubory se obvykle ukládají bez rozdílové komprese.

NuGet podporuje obnovení balíčků v rámci sestavení už dlouhou dobu. Předchozí implementace měla problém s kuřecím a vejcem pro balíčky, které chtějí rozšířit proces sestavení, protože balíčky NuGet obnovily při sestavování projektu. Nástroj MSBuild však neumožňuje rozšíření sestavení během sestavení; jeden by mohl argumentovat, že tento problém v NÁSTROJI MSBuild, ale já bych řekl, že to je vlastní problém. V závislosti na tom, který aspekt potřebujete prodloužit, může být příliš pozdě, než se zaregistruje čas obnovení balíčku.

Lék na tento problém spočívá v tom, že se balíčky obnoví jako první krok procesu sestavení:

nuget restore path\to\solution.sln

Když proces sestavení obnoví balíčky před sestavením kódu, nebudete muset vrátit soubory se změnami .targets .

Poznámka:

Balíčky musí být vytvořené tak, aby umožňovaly načítání v sadě Visual Studio. Jinak můžete chtít soubory vrátit se změnami .targets , aby ostatní vývojáři mohli řešení jednoduše otevřít, aniž by museli napřed obnovovat balíčky.

Následující ukázkový projekt ukazuje, jak nastavit sestavení takovým způsobem, aby packages složky a .targets soubory nemusely být vráceny se změnami. Ukazuje také, jak pro tento ukázkový projekt nastavit automatizované sestavení ve službě Team Foundation Service.

Struktura úložiště

Náš ukázkový projekt je jednoduchý nástroj příkazového řádku, který k dotazování Bingu používá argument příkazového řádku. Cílí na rozhraní .NET Framework 4 a používá mnoho balíčků BCL (Microsoft.Net.Http, Microsoft.Bcl, Microsoft.Bcl.Async a Microsoft.Bcl.Build).

Struktura úložiště vypadá takto:

<Project>
    │   .gitignore
    │   .tfignore
    │   build.proj
    │
    ├───src
    │   │   BingSearcher.sln
    │   │
    │   └───BingSearcher
    │       │   App.config
    │       │   BingSearcher.csproj
    │       │   packages.config
    │       │   Program.cs
    │       │
    │       └───Properties
    │               AssemblyInfo.cs
    │
    └───tools
        └───NuGet
                nuget.exe

Vidíte, že jsme složku nezaškrtli packages ani žádné .targets soubory.

Přihlásili jsme se ale podle nuget.exe potřeby během sestavení. Podle široce používaných konvencí jsme ho zkontrolovali ve sdílené tools složce.

Zdrojový kód je ve src složce. I když naše ukázka používá jenom jedno řešení, můžete si snadno představit, že tato složka obsahuje více než jedno řešení.

Ignorování souborů

Poznámka:

V současné době [known bug in the NuGet client](https://nuget.codeplex.com/workitem/4072) existuje možnost, která způsobí, že klient stále přidá packages složku do správy verzí. Alternativním řešením je zakázat integraci správy zdrojového kódu. K tomu potřebujete Nuget.Config soubor ve .nuget složce, která je paralelní s vaším řešením. Pokud tato složka ještě neexistuje, musíte ji vytvořit. Do Nuget.Configpole přidejte následující obsah:

<configuration>
    <solution>
        <add key="disableSourceControlIntegration" value="true" />
    </solution>
</configuration>

Abychom mohli komunikovat se správou verzí, že nechceme vrátit složky balíčků se změnami, přidali jsme také soubory pro Git (.gitignore) i správu verzí TF (.tfignore). Tyto soubory popisují vzory souborů, které nechcete vrátit se změnami.

Soubor .gitignore vypadá takto:

syntax: glob
*.user
*.suo
bin
obj
packages
*.nupkg
project.lock.json
project.assets.json

Soubor .gitignore je poměrně výkonný. Pokud například chcete obecně nekontrolovat obsah packages složky, ale chcete přejít s předchozími pokyny pro vrácení souborů se změnami .targets , můžete místo toho mít následující pravidlo:

packages
!packages/**/*.targets

Tím se vyloučí všechny packages složky, ale znovu zahrnou všechny obsažené .targets soubory. Mimochodem, můžete najít šablonu pro .gitignore soubory, které jsou speciálně přizpůsobené potřebám vývojářů sady Visual Studio zde.

Správa verzí TF podporuje velmi podobný mechanismus prostřednictvím souboru .tfignore . Syntaxe je prakticky stejná:

*.user
*.suo
bin
obj
packages
*.nupkg
project.lock.json
project.assets.json

build.proj

Pro naši ukázku udržujeme proces sestavení poměrně jednoduchý. Vytvoříme projekt MSBuild, který sestaví všechna řešení a zajistí, aby se balíčky před sestavením řešení obnovily.

Tento projekt bude mít tři konvenční cíle CleanBuild a Rebuild také nový cíl RestorePackages.

  • Rebuild Oba Build cíle závisí na RestorePackages. Tím se zajistí, že můžete spouštět Build i Rebuild spoléhat na obnovování balíčků.
  • CleanBuild a Rebuild vyvolá odpovídající cíl NÁSTROJE MSBuild pro všechny soubory řešení.
  • Cíl RestorePackages se vyvolá nuget.exe pro každý soubor řešení. Toho se dosahuje pomocí funkce dávkování nástroje MSBuild.

Výsledek vypadá takto:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0"
            DefaultTargets="Build"
            xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <PropertyGroup>
    <OutDir Condition=" '$(OutDir)'=='' ">$(MSBuildThisFileDirectory)bin\</OutDir>
    <Configuration Condition=" '$(Configuration)'=='' ">Release</Configuration>
    <SourceHome Condition=" '$(SourceHome)'=='' ">$(MSBuildThisFileDirectory)src\</SourceHome>
    <ToolsHome Condition=" '$(ToolsHome)'=='' ">$(MSBuildThisFileDirectory)tools\</ToolsHome>
    </PropertyGroup>

    <ItemGroup>
    <Solution Include="$(SourceHome)*.sln">
        <AdditionalProperties>OutDir=$(OutDir);Configuration=$(Configuration)</AdditionalProperties>
    </Solution>
    </ItemGroup>

    <Target Name="RestorePackages">
    <Exec Command="&quot;$(ToolsHome)NuGet\nuget.exe&quot; restore &quot;%(Solution.Identity)&quot;" />
    </Target>

    <Target Name="Clean">
    <MSBuild Targets="Clean"
                Projects="@(Solution)" />
    </Target>

    <Target Name="Build" DependsOnTargets="RestorePackages">
    <MSBuild Targets="Build"
                Projects="@(Solution)" />
    </Target>

    <Target Name="Rebuild" DependsOnTargets="RestorePackages">
    <MSBuild Targets="Rebuild"
                Projects="@(Solution)" />
    </Target>
</Project>

Konfigurace týmového sestavení

Týmové sestavení nabízí různé šablony procesů. Pro tuto ukázku používáme Službu Team Foundation Service. Místní instalace TFS budou ale velmi podobné.

Git a SPRÁVA verzí TF mají různé šablony týmového sestavení, takže následující kroky se budou lišit v závislosti na tom, jaký systém správy verzí používáte. V obou případech stačí vybrat build.proj jako projekt, který chcete sestavit.

Nejprve se podíváme na šablonu procesu gitu. V šabloně založené na Gitu je sestavení vybráno prostřednictvím vlastnosti Solution to build:

Build Process for git

Upozorňujeme, že tato vlastnost je umístěním ve vašem úložišti. Protože náš build.proj je v kořeni, jednoduše jsme použili build.proj. Pokud soubor sestavení umístíte do složky s názvem tools, hodnota by byla tools\build.proj.

V šabloně správy verzí TF je projekt vybrán prostřednictvím vlastnosti Projects:

Build Process for TFVC

Na rozdíl od šablony založené na Gitu podporuje správa verzí TF nástroje pro výběr (tlačítko na pravé straně se třemi tečkami). Abyste se vyhnuli chybám při psaní, doporučujeme je použít k výběru projektu.