Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Narzędzia Visual Studio Build Tools można zainstalować w kontenerze systemu Windows, aby obsługiwać przepływy pracy ciągłej integracji i ciągłego dostarczania (CI/CD). W tym artykule opisano wymagane zmiany konfiguracji platformy Docker oraz obciążenia i składniki , które można zainstalować w kontenerze.
Kontenery to doskonały sposób na spakowanie spójnego systemu kompilacji, którego można używać, nie tylko w środowisku serwera ciągłej integracji/ciągłego wdrażania, ale także w środowiskach deweloperskich. Możesz na przykład zainstalować kod źródłowy w kontenerze, który ma zostać skompilowany przez dostosowane środowisko, podczas gdy będziesz nadal używać programu Visual Studio lub innych narzędzi do pisania kodu. Jeśli twój workflow CI/CD używa tego samego obrazu kontenera, możesz być pewny, że twój kod będzie budowany spójnie. Kontenery można również używać na potrzeby spójności środowiska uruchomieniowego, co jest wspólne dla mikrousług przy użyciu wielu kontenerów z systemem aranżacji; jednak wykracza to poza zakres tego artykułu.
Jeśli narzędzia Visual Studio Build Tools nie mają elementów potrzebnych do skompilowania kodu źródłowego, te same kroki mogą być używane w przypadku innych produktów Visual Studio. Należy jednak pamiętać, że kontenery systemu Windows nie obsługują interaktywnego interfejsu użytkownika, więc wszystkie polecenia muszą być zautomatyzowane.
Zanim rozpoczniesz
Zakłada się, że istnieje pewna znajomość platformy Docker . Jeśli nie jesteś z nim zaznajomiony, dowiedz się, jak zainstalować i skonfigurować silnik Docker na Windows.
Poniższy obraz podstawowy jest przykładem i może nie działać dla systemu. Przeczytaj artykuł Zgodność wersji kontenera systemu Windows, aby określić, którego obrazu podstawowego należy użyć dla danego środowiska.
Tworzenie i kompilowanie pliku Dockerfile
Zapisz następujący przykładowy plik Dockerfile na nowym pliku na dysku. Jeśli plik ma nazwę po prostu Dockerfile, jest rozpoznawany domyślnie.
Ostrzeżenie
W tym przykładzie plik Dockerfile wyklucza tylko wcześniejsze zestawy SDK systemu Windows, których nie można zainstalować w kontenerach. Wcześniejsze wersje powodują niepowodzenie polecenia kompilacji.
Otwórz wiersz polecenia.
Utwórz nowy katalog (zalecane):
mkdir C:\BuildToolsZmień katalogi na ten nowy katalog:
cd C:\BuildToolsZapisz następującą zawartość w folderze C:\BuildTools\Dockerfile.
# 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"]Wskazówka
Aby ustawić wartość docelową 64-bitową, określ opcję
-arch=amd64w poleceniuENTRYPOINT, aby uruchomić Developer Command Prompt for Visual Studio (VSDevCmd.bat).Przykład:
ENTRYPOINT ["C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\Common7\\Tools\\VsDevCmd.bat", "-arch=amd64", "&&", "powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]Ostrzeżenie
Jeśli obraz jest oparty bezpośrednio na pliku microsoft/windowsservercore, program .NET Framework może nie zostać poprawnie zainstalowany i nie zostanie wskazany żaden błąd instalacji. Kod zarządzany może nie zostać uruchomiony po zakończeniu instalacji. Zamiast tego opieraj swój obraz na microsoft/dotnet-framework:4.8 lub nowszym. Należy również pamiętać, że obrazy oznaczone jako wersja 4.8 lub nowsza mogą używać programu PowerShell jako domyślnego elementu
SHELL, co powoduje, że instrukcjeRUNiENTRYPOINTzawodzą.Aby dowiedzieć się, które wersje systemu operacyjnego kontenera są obsługiwane w których wersjach systemu operacyjnego hosta, zobacz zgodność wersji kontenera systemu Windows. Zobacz Rozwiązywanie problemów z kontenerami systemu Windows i narzędzi kompilacji , aby zapoznać się ze znanymi problemami.
Uwaga / Notatka
Kod
3010błędu służy do wskazywania powodzenia z wymaganym ponownym uruchomieniem. Aby uzyskać więcej informacji, zobacz MsiExec.exe komunikaty o błędach.Uruchom następujące polecenie w tym katalogu.
docker build -t buildtools:latest -m 2GB .To polecenie kompiluje plik Dockerfile w bieżącym katalogu przy użyciu 2 GB pamięci. Domyślna wartość 1 GB nie jest wystarczająca w przypadku zainstalowania niektórych obciążeń; Jednak w zależności od wymagań dotyczących kompilacji można utworzyć tylko 1 GB pamięci.
Końcowy obraz jest oznaczony tagiem buildtools:latest, dzięki czemu można go łatwo uruchomić w kontenerze jako buildtools, ponieważ tag latest jest domyślny, jeśli nie określono innego tagu. Jeśli chcesz użyć określonej wersji narzędzi Visual Studio Build Tools w bardziej zaawansowanym scenariuszu, możesz zamiast tego oznaczyć kontener określonym numerem kompilacji programu Visual Studio, a także najnowszymi wersjami, aby kontenery mogły spójnie używać określonej wersji.
Użyj zbudowanego obrazu
Po utworzeniu obrazu możesz uruchomić go w kontenerze, aby wykonać zarówno kompilacje interaktywne, jak i automatyczne. W przykładzie użyto wiersza polecenia dla deweloperów, więc ścieżka i inne zmienne środowiskowe są już skonfigurowane.
Otwórz wiersz polecenia.
Uruchom kontener, aby uruchomić środowisko programu PowerShell ze wszystkimi zestawami zmiennych środowiskowych dla deweloperów:
docker run -it buildtools
Aby użyć tego obrazu w przepływie pracy CI/CD, możesz opublikować go we własnym rejestrze Azure Container Registry lub innym wewnętrznym rejestrze Docker, tak aby serwery musiały go tylko pobrać.
Uwaga / Notatka
Jeśli uruchomienie kontenera platformy Docker nie powiedzie się, prawdopodobnie wystąpi problem z instalacją programu Visual Studio. Możesz zaktualizować plik Dockerfile, aby usunąć krok wywołujący polecenie wsadowe programu Visual Studio. Dzięki temu można uruchomić kontener platformy Docker i odczytać dzienniki błędów instalacji.
W pliku Dockerfile usuń parametry C:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat i && z polecenia ENTRYPOINT. Polecenie powinno teraz mieć wartość ENTRYPOINT ["powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]. Następnie ponownie skompiluj plik Dockerfile i wykonaj run polecenie w celu uzyskania dostępu do plików kontenera. Aby zlokalizować dzienniki błędów instalacji, przejdź do $env:TEMP katalogu i znajdź dd_setup_<timestamp>_errors.log plik.
Po zidentyfikowaniu i rozwiązaniu problemu z instalacją możesz dodać parametry C:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat i && z powrotem do polecenia ENTRYPOINT i ponownie zbudować plik Dockerfile.
Aby uzyskać więcej informacji, zobacz Rozwiązywanie problemów z kontenerami systemu Windows i narzędzi kompilacji.
Rozwiązywanie problemów z kontenerami windows i narzędzi kompilacji
Podczas instalowania programu Visual Studio w kontenerze platformy Docker występuje kilka problemów.
Rozwiązywanie problemów z kontenerami systemu Windows
Podczas instalowania narzędzi Visual Studio Build Tools w kontenerze systemu Windows występują następujące znane problemy.
Przekaż
-m 2GB(lub więcej) podczas kompilowania obrazu. Niektóre obciążenia wymagają więcej pamięci niż domyślne 1 GB podczas instalacji.Skonfiguruj platformę Docker do używania dysków większych niż domyślne 20 GB.
Przekaż
--norestartprzez wiersz polecenia. Na moment pisania, próba ponownego uruchomienia kontenera systemu Windows z poziomu kontenera zwracaERROR_TOO_MANY_OPEN_FILESdo hosta.Jeśli opierasz swój obraz bezpośrednio na mcr.microsoft.com/windows/servercore, program .NET Framework może nie zostać poprawnie zainstalowany i nie zostanie wskazany żaden błąd instalacji. Kod zarządzany może nie zostać uruchomiony po zakończeniu instalacji. Zamiast tego użyj jako podstawy obrazu microsoft/dotnet-framework:4.7.1 lub nowszego. Na przykład podczas kompilowania przy użyciu programu MSBuild może wystąpić błąd podobny do następującego:
C:\BuildTools\MSBuild\15.0\bin\Roslyn\Microsoft.CSharp.Core.targets(84,5): błąd MSB6003: nie można uruchomić określonego pliku wykonywalnego zadania "csc.exe". Nie można załadować pliku lub zestawu "System.IO.FileSystem, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f1d50a3a" lub jednej z jego zależności. Nie można odnaleźć określonego pliku.
Rozwiązywanie problemów z kontenerami narzędzi kompilacji
Podczas korzystania z kontenera Narzędzi kompilacji mogą wystąpić następujące znane problemy. Aby sprawdzić, czy problemy zostały rozwiązane, czy istnieją inne znane problemy, odwiedź społeczność deweloperów.
- Funkcja IntelliTrace może nie działać w niektórych scenariuszach w kontenerze.
- W starszych wersjach platformy Docker dla systemu Windows domyślny rozmiar obrazu kontenera wynosi tylko 20 GB i nie pasuje do narzędzi Build Tools. Postępuj zgodnie z instrukcjami, aby zmienić rozmiar obrazu na 127 GB lub więcej.
Aby potwierdzić problem z miejscem na dysku, sprawdź pliki dziennika, aby uzyskać więcej informacji. Plik
vslogs\dd_setup_<timestamp>_errors.logzawiera następujące elementy, jeśli zabraknie miejsca na dysku:
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.