Instalace buildových nástrojů do kontejneru

Visual Studio Build Tools můžete nainstalovat do kontejneru Windows, který podporuje pracovní postupy kontinuální integrace a průběžného doručování (CI/CD). Tento článek vás provede tím, jaké změny konfigurace Dockeru se vyžadují a jaké úlohy a komponenty můžete nainstalovat do kontejneru.

Kontejnery představují skvělý způsob, jak zabalit konzistentní systém sestavení, který můžete použít nejen v prostředí serveru CI/CD, ale i pro vývojová prostředí. Zdrojový kód můžete například připojit ke kontejneru, který bude sestaven přizpůsobeným prostředím, zatímco k psaní kódu budete dál používat Visual Studio nebo jiné nástroje. Pokud váš pracovní postup CI/CD používá stejnou image kontejneru, můžete mít jistotu, že se váš kód konzistentně sestaví. Kontejnery můžete použít také pro konzistenci modulu runtime, což je běžné pro mikroslužby využívající více kontejnerů se systémem orchestrace; je však nad rámec tohoto článku.

Pokud Visual Studio Build Tools nemá to, co potřebujete k sestavení zdrojového kódu, můžete použít stejný postup pro jiné produkty sady Visual Studio. Upozorňujeme ale, že kontejnery Windows nepodporují interaktivní uživatelské rozhraní, takže všechny příkazy musí být automatizované.

Než začnete

Níže se předpokládá znalost Dockeru . Pokud ještě neznáte spouštění Dockeru ve Windows, přečtěte si, jak nainstalovat a nakonfigurovat modul Docker ve Windows.

Základní obrázek níže je ukázka a nemusí fungovat pro váš systém. Přečtěte si kompatibilitu verzí kontejneru Windows a zjistěte, jakou základní image byste měli použít pro své prostředí.

Vytvoření a sestavení souboru Dockerfile

Uložte následující příklad souboru Dockerfile do nového souboru na disku. Pokud se soubor jmenuje jednoduše "Dockerfile", rozpozná se ve výchozím nastavení.

Upozorňující

Tento příklad dockerfile vylučuje pouze starší sady Windows SDK, které nelze nainstalovat do kontejnerů. Dřívější verze způsobují selhání příkazu sestavení.

  1. Otevřete příkazový řádek.

  2. Vytvořte nový adresář (doporučeno):

    mkdir C:\BuildTools
    
  3. Změňte adresáře na tento nový adresář:

    cd C:\BuildTools
    
  4. Uložte následující obsah do souboru C:\BuildTools\Dockerfile.

    # escape=`
    
    # Use the latest Windows Server Core 2019 image.
    FROM mcr.microsoft.com/windows/servercore:ltsc2019
    
    # Restore the default Windows shell for correct batch processing.
    SHELL ["cmd", "/S", "/C"]
    
    RUN `
        # Download the Build Tools bootstrapper.
        curl -SL --output vs_buildtools.exe https://aka.ms/vs/16/release/vs_buildtools.exe `
        `
        # Install Build Tools with the Microsoft.VisualStudio.Workload.AzureBuildTools workload, excluding workloads and components with known issues.
        && (start /w vs_buildtools.exe --quiet --wait --norestart --nocache `
            --installPath "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\BuildTools" `
            --add Microsoft.VisualStudio.Workload.AzureBuildTools `
            --remove Microsoft.VisualStudio.Component.Windows10SDK.10240 `
            --remove Microsoft.VisualStudio.Component.Windows10SDK.10586 `
            --remove Microsoft.VisualStudio.Component.Windows10SDK.14393 `
            --remove Microsoft.VisualStudio.Component.Windows81SDK `
            || IF "%ERRORLEVEL%"=="3010" EXIT 0) `
        `
        # Cleanup
        && del /q vs_buildtools.exe
    
    # Define the entry point for the docker container.
    # This entry point starts the developer command prompt and launches the PowerShell shell.
    ENTRYPOINT ["C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\Common7\\Tools\\VsDevCmd.bat", "&&", "powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]
    

    Tip

    Pokud chcete cílit na 64bitovou verzi, zadejte -arch=amd64 v ENTRYPOINT příkazu možnost pro spuštění příkazového řádku pro vývojáře pro Visual Studio (VSDevCmd.bat).

    Příklad: ENTRYPOINT ["C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\Common7\\Tools\\VsDevCmd.bat", "-arch=amd64", "&&", "powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]

    Upozorňující

    Pokud image založíte přímo na microsoft/windowsservercore, nemusí se rozhraní .NET Framework správně nainstalovat a není uvedena žádná chyba instalace. Spravovaný kód se nemusí spustit po dokončení instalace. Místo toho založte image na platformě microsoft/dotnet-framework:4.8] nebo novější. Všimněte si také, že image označené verze 4.8 nebo novější můžou jako výchozí SHELLpoužít PowerShell, což způsobí RUN selhání a ENTRYPOINT pokyny.

    Informace o podporovaných verzích operačního systému kontejneru ve Windows a řešení potíží s kontejnery nástroje Windows a Build Tools pro známé problémy najdete v tématu Kompatibilita verzí kontejneru s Windows.

    # escape=`
    
    # Use the latest Windows Server Core 2022 image.
    FROM mcr.microsoft.com/windows/servercore:ltsc2022
    
    # Restore the default Windows shell for correct batch processing.
    SHELL ["cmd", "/S", "/C"]
    
    RUN `
        # Download the Build Tools bootstrapper.
        curl -SL --output vs_buildtools.exe https://aka.ms/vs/17/release/vs_buildtools.exe `
        `
        # Install Build Tools with the Microsoft.VisualStudio.Workload.AzureBuildTools workload, excluding workloads and components with known issues.
        && (start /w vs_buildtools.exe --quiet --wait --norestart --nocache `
            --installPath "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\BuildTools" `
            --add Microsoft.VisualStudio.Workload.AzureBuildTools `
            --remove Microsoft.VisualStudio.Component.Windows10SDK.10240 `
            --remove Microsoft.VisualStudio.Component.Windows10SDK.10586 `
            --remove Microsoft.VisualStudio.Component.Windows10SDK.14393 `
            --remove Microsoft.VisualStudio.Component.Windows81SDK `
            || IF "%ERRORLEVEL%"=="3010" EXIT 0) `
        `
        # Cleanup
        && del /q vs_buildtools.exe
    
    # Define the entry point for the docker container.
    # This entry point starts the developer command prompt and launches the PowerShell shell.
    ENTRYPOINT ["C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\Common7\\Tools\\VsDevCmd.bat", "&&", "powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]
    

    Tip

    Pokud chcete cílit na 64bitovou verzi, zadejte -arch=amd64 v ENTRYPOINT příkazu možnost pro spuštění příkazového řádku pro vývojáře pro Visual Studio (VSDevCmd.bat).

    Příklad: ENTRYPOINT ["C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\Common7\\Tools\\VsDevCmd.bat", "-arch=amd64", "&&", "powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]

    Upozorňující

    Pokud image založíte přímo na microsoft/windowsservercore, nemusí se rozhraní .NET Framework správně nainstalovat a není uvedena žádná chyba instalace. Spravovaný kód se nemusí spustit po dokončení instalace. Místo toho založte image na platformě microsoft/dotnet-framework:4.8 nebo novější. Všimněte si také, že image označené verze 4.8 nebo novější můžou jako výchozí SHELLpoužít PowerShell, což způsobí RUN selhání a ENTRYPOINT pokyny.

    Informace o podporovaných verzích operačního systému kontejneru ve Windows a řešení potíží s kontejnery nástroje Windows a Build Tools pro známé problémy najdete v tématu Kompatibilita verzí kontejneru s Windows.

    Poznámka:

    Kód 3010 chyby se používá k označení úspěchu s požadovaným restartováním. Další informace najdete v MsiExec.exe chybových zprávách .

  5. V tomto adresáři spusťte následující příkaz.

    docker build -t buildtools2019:latest -m 2GB .
    

    Tento příkaz sestaví soubor Dockerfile v aktuálním adresáři pomocí 2 GB paměti. Výchozí 1 GB není dostačující, když jsou některé úlohy nainstalovány; V závislosti na požadavcích na sestavení ale můžete být schopni sestavovat pouze s 1 GB paměti.

    Konečná image je označená buildtools2019:latest , takže ji můžete snadno spustit v kontejneru, protože buildtools2019 značka "latest" je výchozí, pokud není zadána žádná značka. Pokud chcete použít konkrétní verzi visual studio Build Tools 2019 v pokročilejším scénáři, můžete místo toho kontejner označit konkrétním číslem sestavení sady Visual Studio a také nejnovějším, aby kontejnery mohly konzistentně používat konkrétní verzi.

    docker build -t buildtools:latest -m 2GB .
    

    Tento příkaz sestaví soubor Dockerfile v aktuálním adresáři pomocí 2 GB paměti. Výchozí 1 GB není dostačující, pokud jsou některé úlohy nainstalovány; V závislosti na požadavcích na sestavení ale můžete být schopni sestavovat pouze s 1 GB paměti.

    Poslední image je označená jako buildtools:latest, takže ji můžete snadno spustit v kontejneru jako buildtools, protože pokud není zadaná žádná značka, je výchozí značka "latest". Pokud chcete použít konkrétní verzi nástrojů Visual Studio Build Tools v pokročilejším scénáři, můžete místo toho kontejner označit určitým číslem sestavení sady Visual Studio a také nejnovějším, aby kontejnery mohly konzistentně používat konkrétní verzi.

Použití vytvořené image

Teď, když jste vytvořili image, můžete ji spustit v kontejneru a provádět interaktivní i automatizované sestavení. V příkladu se používá příkazový řádek pro vývojáře, takže vaše cesta a další proměnné prostředí jsou už nakonfigurované.

  1. Otevřete příkazový řádek.

  2. Spuštěním kontejneru spusťte prostředí PowerShell se všemi sadami proměnných vývojového prostředí:

    docker run -it buildtools2019
    
    docker run -it buildtools
    

Pokud chcete tuto image použít pro pracovní postup CI/CD, můžete ji publikovat do vlastního registru Azure Container Registry nebo jiného interního registru Dockeru, aby je servery potřebovaly jen načíst.

Poznámka:

Pokud se kontejner Dockeru nepodaří spustit, pravděpodobně dojde k problému s instalací sady Visual Studio. Soubor Dockerfile můžete aktualizovat tak, aby odebral krok, který volá příkaz batch sady Visual Studio. To vám umožní spustit kontejner Dockeru a číst protokoly chyb instalace.

V souboru Dockerfile odeberte C:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat z příkazu parametryENTRYPOINT.&& Příkaz by teď měl být ENTRYPOINT ["powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]. Dále znovu sestavte soubor Dockerfile a spusťte run příkaz pro přístup k souborům kontejneru. Pokud chcete najít protokoly chyb instalace, přejděte do $env:TEMP adresáře a vyhledejte dd_setup_<timestamp>_errors.log soubor.

Po identifikaci a opravě problému s instalací můžete přidat C:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat parametry zpět && do ENTRYPOINT příkazu a znovu sestavit soubor Dockerfile.

Další informace najdete v tématu Řešení potíží s kontejnery Nástrojů systému Windows a Build Tools.

Řešení potíží s kontejnery Nástrojů pro Windows a buildy

Při instalaci sady Visual Studio do kontejneru Dockeru dochází k několika problémům.

Řešení potíží s kontejnery Windows

Při instalaci nástrojů Visual Studio Build Tools do kontejneru Windows dochází k následujícím známým problémům.

  • Předání -m 2GB (nebo více) při vytváření image Některé úlohy vyžadují při instalaci více paměti než výchozí 1 GB.

  • Nakonfigurujte Docker tak, aby používal disky větší než výchozí 20 GB.

  • Předejte --norestart příkazový řádek. Od tohoto zápisu se pokus o restartování kontejneru Windows z tohoto kontejneru vrátí ERROR_TOO_MANY_OPEN_FILES hostiteli.

  • Pokud image založíte přímo na mcr.microsoft.com/windows/servercore, nemusí se rozhraní .NET Framework správně nainstalovat a není uvedena žádná chyba instalace. Spravovaný kód se nemusí spustit po dokončení instalace. Místo toho založte image na platformě microsoft/dotnet-framework:4.7.1 nebo novější. Například při sestavování pomocí nástroje MSBuild se může zobrazit chyba podobná této:

    C:\BuildTools\MSBuild\15.0\bin\Roslyn\Microsoft.CSharp.Core.targets(84;5): chyba MSB6003: Zadaný spustitelný soubor úlohy "csc.exe" nelze spustit. Nelze načíst soubor nebo sestavení System.IO.FileSystem, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a nebo jednu z jejích závislostí. Systém nemůže najít zadaný soubor.

Řešení potíží s kontejnery Build Tools

Při použití kontejneru Nástroje sestavení může dojít k následujícím známým problémům. Pokud chcete zjistit, jestli byly problémy opravené nebo jestli existují další známé problémy, navštivte komunitu vývojářů.

  • IntelliTrace nemusí v některých scénářích v kontejneru fungovat.
  • Ve starších verzích Dockeru pro Windows je výchozí velikost image kontejneru pouze 20 GB a nebude odpovídat nástrojům buildu. Podle pokynů změňte velikost obrázku na 127 GB nebo více. Pokud chcete ověřit problém s místem na disku, vyhledejte další informace v souborech protokolu. Pokud vslogs\dd_setup_<timestamp>_errors.log vám dojde místo na disku, soubor bude obsahovat následující:
Pre-check verification: Visual Studio needs at least 91.99 GB of disk space. Try to free up space on C:\ or change your target drive.
Pre-check verification failed with error(s) :  SizePreCheckEvaluator.