Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Средства сборки Visual Studio можно установить в контейнер Windows для поддержки рабочих процессов непрерывной интеграции и непрерывной доставки (CI/CD). В этой статье описаны необходимые изменения конфигурации Docker, а также сведения о рабочих нагрузках и компонентах , которые можно установить в контейнере.
Контейнеры — отличный способ упаковать согласованную систему сборки, используемую не только в среде сервера CI/CD, но и в средах разработки. Например, вы можете подключить исходный код к контейнеру, который будет создан настраиваемой средой, пока вы продолжаете использовать Visual Studio или другие средства для написания кода. Если рабочий процесс CI/CD использует тот же образ контейнера, вы можете убедиться, что код выполняет сборку последовательно. Вы также можете использовать контейнеры для согласованности среды выполнения, что обычно для микрослужб с использованием нескольких контейнеров с системой оркестрации; однако это выходит за рамки этой статьи.
Если средства сборки Visual Studio не имеют необходимых средств для сборки исходного кода, эти же действия можно использовать для других продуктов Visual Studio. Обратите внимание, что контейнеры Windows не поддерживают интерактивный пользовательский интерфейс, поэтому все команды должны быть автоматизированы.
Перед тем как начать
Предполагается некоторое знакомство с Docker . Если вы не знакомы с ним, узнайте, как установить и настроить подсистему Docker в Windows.
Следующий базовый образ является примером и может не работать для вашей системы. Ознакомьтесь с совместимостью версий контейнера Windows , чтобы определить, какой базовый образ следует использовать для вашей среды.
Создание и сборка Dockerfile
Сохраните следующий пример Dockerfile в новый файл на диске. Если файл называется просто Dockerfile, он распознается по умолчанию.
Предупреждение
В этом примере Dockerfile исключены только более ранние пакеты SDK для Windows, которые не могут быть установлены в контейнеры. Предыдущие выпуски вызывают сбой команды сборки.
Откройте командную строку.
Создайте каталог (рекомендуется):
mkdir C:\BuildToolsПерейдите в этот новый каталог:
cd C:\BuildToolsСохраните следующее содержимое в 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"]Подсказка
Чтобы выбрать 64-разрядную версию, укажите
-arch=amd64параметр в командеENTRYPOINT, чтобы запустить командную строку разработчика для Visual Studio (VSDevCmd.bat).Например:
ENTRYPOINT ["C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\Common7\\Tools\\VsDevCmd.bat", "-arch=amd64", "&&", "powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]Предупреждение
Если вы создаёте образ непосредственно на основе microsoft/windowsservercore, платформа .NET Framework может не устанавливаться правильно, и ошибка установки может не проявляться. Управляемый код может не выполняться после завершения установки. Вместо этого основывайте ваш образ на microsoft/dotnet-framework:4.8 или более поздней версии. Кроме того, обратите внимание, что изображения, помеченные как версии 4.8 или более поздней, могут использовать PowerShell в качестве интерпретатора по умолчанию, что приводит к сбою инструкций
RUNиENTRYPOINT.Сведения о том, какие версии ОС контейнера поддерживаются в версиях ос узла, см. в статье о совместимости версий контейнеров Windows. Проверьте Контейнеры для устранения неполадок Windows и Build Tools на наличие известных проблем.
Замечание
Код
3010ошибки используется для указания успешного выполнения перезагрузки. Дополнительные сведения см. в сообщениях об ошибках MsiExec.exe.Выполните следующую команду в этом каталоге.
docker build -t buildtools:latest -m 2GB .Эта команда создает Dockerfile в текущем каталоге с помощью 2 ГБ памяти. Значение по умолчанию в 1 ГБ может быть недостаточно при установке некоторых нагрузок, однако в зависимости от требований сборки возможно проведение сборки и на 1 ГБ памяти.
Окончательный образ имеет тег buildtools:latest, чтобы его можно было легко запустить в контейнере как buildtools, так как тег latest является значением по умолчанию, если тег не указан. Если вы хотите использовать определенную версию средств сборки Visual Studio в более сложном сценарии, можно вместо этого пометить контейнер с определенным номером сборки Visual Studio, а также последними , чтобы контейнеры могли использовать определенную версию согласованно.
Использование созданного образа
Теперь, когда вы создали образ, его можно запустить в контейнере, чтобы выполнять интерактивные и автоматизированные сборки. В примере используется командная строка разработчика, поэтому ПУТЬ и другие переменные среды уже настроены.
Откройте командную строку.
Запустите контейнер, чтобы запустить среду PowerShell со всеми переменными среды разработчика:
docker run -it buildtools
Чтобы использовать этот образ для рабочего процесса CI/CD, его можно опубликовать в собственном реестре контейнеров Azure или другом внутреннем реестре Docker, чтобы серверы просто извлекали его оттуда.
Замечание
Если не удается запустить контейнер Docker, скорее всего, возникла проблема с установкой Visual Studio. Можно обновить Dockerfile, чтобы удалить шаг, который вызывает пакетную команду Visual Studio. Это позволяет запустить контейнер Docker и прочитать журналы ошибок установки.
В файле Dockerfile удалите параметры C:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat и && из команды ENTRYPOINT. Теперь команда должна быть ENTRYPOINT ["powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]. Затем перестройте Dockerfile и выполните run команду для доступа к файлам контейнеров. Чтобы найти журналы ошибок установки, перейдите в $env:TEMP каталог и найдите dd_setup_<timestamp>_errors.log файл.
После выявления и устранения проблемы с установкой можно добавить C:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat и && параметры обратно в ENTRYPOINT команду и перестроить Dockerfile.
Дополнительные сведения см. в разделе "Устранение неполадок контейнеров Windows и средств сборки".
Устранение неполадок контейнеров Windows и Средств сборки
При установке Visual Studio в контейнер Docker существует несколько проблем.
Устранение неполадок контейнеров Windows
При установке средств сборки Visual Studio в контейнер Windows возникают следующие известные проблемы.
Передайте
-m 2GB(или более) при создании образа. Для некоторых рабочих нагрузок требуется больше памяти, чем при установке по умолчанию 1 ГБ.Настройте Docker для использования дисков размером больше 20 ГБ по умолчанию.
Передайте
--norestartв командной строке. На момент написания, попытка перезапустить контейнер Windows из контейнера возвращаетERROR_TOO_MANY_OPEN_FILESхосту.Если вы используете образ непосредственно на mcr.microsoft.com/windows/servercore, .NET Framework может установиться некорректно, и ошибка установки не будет отображена. Управляемый код может не выполняться после завершения установки. Вместо этого используйте образ, основанный на microsoft/dotnet-framework:4.7.1 или более поздней версии. Например, при сборке с помощью MSBuild может появиться ошибка, аналогичная следующему:
C:\BuildTools\MSBuild\15.0\bin\Roslyn\Microsoft.CSharp.Core.targets(84,5): ошибка MSB6003: не удалось запустить указанный исполняемый файл задачи "csc.exe". Не удалось загрузить файл или сборку System.IO.FileSystem, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a или одну из зависимостей. Системе не удается найти указанный файл.
Устранение неполадок контейнеров средств сборки
При использовании контейнера средств сборки могут возникнуть следующие известные проблемы. Чтобы узнать, были ли устранены проблемы или существуют ли другие известные проблемы, посетите сообщество разработчиков.
- IntelliTrace может не работать в некоторых сценариях в контейнере.
- В более старых версиях Docker для Windows размер образа контейнера по умолчанию составляет всего 20 ГБ и не подходит для средств сборки. Следуйте инструкциям по изменению размера изображения на 127 ГБ или более.
Чтобы подтвердить проблему с местом на диске, проверьте файлы журнала для получения дополнительных сведений. Файл
vslogs\dd_setup_<timestamp>_errors.logвключает в себя следующее, если у вас не будет места на диске:
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.