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í.
Otevřete příkazový řádek.
Vytvořte nový adresář (doporučeno):
mkdir C:\BuildTools
Změňte adresáře na tento nový adresář:
cd C:\BuildTools
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
vENTRYPOINT
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í
SHELL
použít PowerShell, což způsobíRUN
selhání aENTRYPOINT
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
vENTRYPOINT
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í
SHELL
použít PowerShell, což způsobíRUN
selhání aENTRYPOINT
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 .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žebuildtools2019
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é.
Otevřete příkazový řádek.
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.