Установка Build Tools в контейнер Install Build Tools into a container
Средства Visual Studio Build Tools можно установить в контейнере Windows для поддержки процессов непрерывной интеграции и поставки. You can install Visual Studio Build Tools into a Windows container to support continuous integration and continuous delivery (CI/CD) workflows. В этой статье описываются необходимые изменения конфигурации Docker, а также рабочие нагрузки и компоненты, которые можно установить в контейнере. This article guides you through what Docker configuration changes are required as well as what workloads and components you can install in a container.
Контейнеры — это отличное средство для упаковки согласованной системы сборки, которую можно использовать не только в серверной среде непрерывной интеграции и поставки, но и в средах разработки. Containers are a great way to package a consistent build system you can use not only in a CI/CD server environment but for development environments as well. Например, вы можете поместить исходный код в контейнер, сборка которого будет выполняться в настраиваемой среде, и в то же время продолжать использовать Visual Studio или другие средства для написания кода. For example, you can mount your source code into a container to be built by a customized environment while you continue to use Visual Studio or other tools to write your code. Если в рамках рабочего процесса непрерывной интеграции и поставки используется тот же образ контейнера, можно быть уверенным в том, что сборка кода будет производиться согласованно. If your CI/CD workflow uses the same container image, you can rest assured that your code builds consistently. Контейнеры можно также применять для обеспечения согласованности среды выполнения. Это обычный сценарий для микрослужб, использующих несколько контейнеров с системой оркестрации, однако он выходит за рамки этой статьи. You can use containers for runtime consistency as well, which is common for micro-services using multiple containers with an orchestration system; however, is beyond the scope of this article.
Если возможностей средств Visual Studio Build Tools недостаточно для сборки исходного кода, эти же инструкции можно использовать для других продуктов Visual Studio. If Visual Studio Build Tools does not have what you require to build your source code, these same steps can be used for other Visual Studio products. Однако имейте в виду, что контейнеры Windows не поддерживают интерактивный пользовательский интерфейс, поэтому все команды должны быть автоматизированы. Do note, however, that Windows containers do not support an interactive user interface so all commands must be automated.
Подготовка к работе Before you begin
Ниже предполагается, что вы знакомы с некоторыми функциями Docker. Some familiarity with Docker is assumed below. Если вы еще знаете, как работать с Docker в Windows, прочитайте статью об установке и настройке модуля Docker в Windows. If you’re not already familiar with running Docker on Windows, read about how to install and configure the Docker engine on Windows.
Используемый далее базовый образ является примером и может не подойти для вашей системы. The base image below is a sample and may not work for your system. Ознакомьтесь со статьей Windows container version compatibility (Совместимость версий контейнеров Windows), чтобы определить, какой базовый образ вам следует использовать для среды. Read Windows container version compatibility to determine which base image you should use for your environment.
Создание и сборка Dockerfile Create and build the Dockerfile
Сохраните приведенный ниже пример Dockerfile в новый файл на диске. Save the following example Dockerfile to a new file on your disk. Если файл имеет имя Dockerfile, он распознается по умолчанию. If the file is named simply «Dockerfile», it is recognized by default.
В этом примере файла Dockerfile исключены только более ранние пакеты Windows SDK, которые невозможно установить в контейнерах. This example Dockerfile excludes only earlier Windows SDKs that cannot be installed into containers. Более ранние выпуски приводят к сбою команды сборки. Earlier releases cause the build command to fail.
Откройте окно командной строки. Open a command prompt.
Создайте каталог (рекомендуется): Create a new directory (recommended):
Перейдите в этот каталог: Change directories to this new directory:
Сохраните в каталоге C:\BuildTools\Dockerfile представленное ниже содержимое. Save the following content to C:\BuildTools\Dockerfile.
Список рабочих нагрузок и компонентов см. в каталоге компонентов для Visual Studio Build Tools. For a list of workloads and components, see the Visual Studio Build Tools component directory.
Если образ основан непосредственно на microsoft/windowsservercore или mcr.microsoft.com/windows/servercore (см. статью блога о переходе Майкрософт на модель объединения каталогов контейнеров), платформа .NET Framework может не установиться правильно, причем сообщения об ошибках выводиться не будут. If you base your image directly on microsoft/windowsservercore or mcr.microsoft.com/windows/servercore (see Microsoft syndicates container catalog), the .NET Framework might not install properly and no install error is indicated. После завершения установки управляемый код может не запускаться. Managed code might not run after the install is complete. Вместо этого создайте образ на основе microsoft/dotnet-framework:4.7.2 или более поздней версии. Instead, base your image on microsoft/dotnet-framework:4.7.2 or later. Также обратите внимание, что образы, для которых указана версия 4.7.2 или более поздняя, могут использовать PowerShell в качестве SHELL по умолчанию, что будет приводить к сбою инструкций RUN и ENTRYPOINT . Also note that images that are tagged version 4.7.2 or later might use PowerShell as the default SHELL , which will cause the RUN and ENTRYPOINT instructions to fail.
Visual Studio 2017 версии 15.8 или более ранней (любого продукта) не будет правильно установлена на образ mcr.microsoft.com/windows/servercore:1809 или более поздней версии. Visual Studio 2017 version 15.8 or earlier (any product) will not properly install on mcr.microsoft.com/windows/servercore:1809 or later. При этом сообщение об ошибке не отображается. No error is displayed.
Список версий ОС контейнеров, поддерживаемых определенными версиями ОС узлов, см. в статье Windows container version compatibility. Сведения об известных проблемах с контейнерами см. в этой статье. See Windows container version compatibility to see which container OS versions are supported on which host OS versions, and Known issues for containers for known issues.
Список рабочих нагрузок и компонентов см. в каталоге компонентов для Visual Studio Build Tools. For a list of workloads and components, see the Visual Studio Build Tools component directory.
Если образ основан непосредственно на microsoft/windowsservercore, платформа .NET Framework может не установиться правильно, причем сообщения об ошибках выводиться не будут. If you base your image directly on microsoft/windowsservercore, the .NET Framework might not install properly and no install error is indicated. После завершения установки управляемый код может не запускаться. Managed code might not run after the install is complete. Вместо этого создайте образ на основе microsoft/dotnet-framework:4.8 или более поздней версии. Instead, base your image on microsoft/dotnet-framework:4.8 or later. Также обратите внимание, что образы, для которых указана версия 4.8 или более поздняя, могут использовать PowerShell в качестве SHELL по умолчанию, что будет приводить к сбою инструкций RUN и ENTRYPOINT . Also note that images that are tagged version 4.8 or later might use PowerShell as the default SHELL , which will cause the RUN and ENTRYPOINT instructions to fail.
Список версий ОС контейнеров, поддерживаемых определенными версиями ОС узлов, см. в статье Windows container version compatibility. Сведения об известных проблемах с контейнерами см. в этой статье. See Windows container version compatibility to see which container OS versions are supported on which host OS versions, and Known issues for containers for known issues.
Код ошибки 3010 указывает на успешное выполнение, после которого требуется перезагрузка. Дополнительные сведения см. в разделе Сообщения об ошибках MsiExec.exe. Error code 3010 is used to indicate success with a reboot required, see MsiExec.exe error messages for more information.
Выполните в этом каталоге приведенную ниже команду. Run the following command within that directory.
Эта команда выполняет сборку файла Dockerfile в текущем каталоге, используя 2 ГБ памяти. This command builds the Dockerfile in the current directory using 2 GB of memory. Размер памяти по умолчанию, равный 1 ГБ, недостаточен, если установлены некоторые рабочие нагрузки. Однако в зависимости от требований вам, возможно, удастся выполнить сборку, используя всего 1 ГБ памяти. The default 1 GB is not sufficient when some workloads are installed; however, you might be able to build with only 1 GB of memory depending on your build requirements.
Итоговый образ помечается как «buildtools2017:latest», так что вы можете легко запустить его в контейнере как «buildtools2017», так как «latest» — это тег по умолчанию, используемый, если тег не указан. The final image is tagged «buildtools2017:latest» so you can easily run it in a container as «buildtools2017» since the «latest» tag is the default if no tag is specified. Если вы хотите использовать определенную версию средств Visual Studio Build Tools 2017 в более сложном сценарии, вы можете пометить контейнер конкретным номером сборки Visual Studio, а также тегом «latest», чтобы контейнеры применяли одну и ту же версию. If you want to use a specific version of Visual Studio Build Tools 2017 in a more advanced scenario, you might instead tag the container with a specific Visual Studio build number as well as «latest» so containers can use a specific version consistently.
Эта команда выполняет сборку файла Dockerfile в текущем каталоге, используя 2 ГБ памяти. This command builds the Dockerfile in the current directory using 2 GB of memory. Размер памяти по умолчанию, равный 1 ГБ, недостаточен, если установлены некоторые рабочие нагрузки. Однако в зависимости от требований вам, возможно, удастся выполнить сборку, используя всего 1 ГБ памяти. The default 1 GB is not sufficient when some workloads are installed; however, you might be able to build with only 1 GB of memory depending on your build requirements.
Итоговый образ помечается как «buildtools2019:latest», так что вы можете легко запустить его в контейнере как «buildtools2019», так как «latest» — это тег по умолчанию, используемый, если тег не указан. The final image is tagged «buildtools2019:latest» so you can easily run it in a container as «buildtools2019» since the «latest» tag is the default if no tag is specified. Если вы хотите использовать определенную версию средств Visual Studio Build Tools 2019 в более сложном сценарии, вы можете пометить контейнер конкретным номером сборки Visual Studio, а также тегом «latest», чтобы контейнеры применяли одну и ту же версию. If you want to use a specific version of Visual Studio Build Tools 2019 in a more advanced scenario, you might instead tag the container with a specific Visual Studio build number as well as «latest» so containers can use a specific version consistently.
Использование собранного образа Using the built image
После создания образа его можно запустить в контейнере для выполнения как интерактивной, так и автоматической сборки. Now that you have created an image, you can run it in a container to do both interactive and automated builds. В этом примере используется Командная строка разработчика, поэтому PATH и другие переменные среды уже настроены. The example uses the Developer Command Prompt, so your PATH and other environment variables are already configured.
Откройте окно командной строки. Open a command prompt.
Запустите контейнер, чтобы запустить среду PowerShell, в которой заданы все переменные среды разработчика: Run the container to start a PowerShell environment with all developer environment variables set:
Чтобы использовать этот образ для рабочего процесса CI/CD, его можно опубликовать в собственном Реестре контейнеров Azure или другом внутреннем реестре Docker, откуда его могут извлекать серверы. To use this image for your CI/CD workflow, you can publish it to your own Azure Container Registry or other internal Docker registry so servers need only to pull it.
Если запуск контейнера Docker завершается сбоем, скорее всего, существует проблема, связанная с установкой Visual Studio. If the Docker container fails to start, there’s likely a Visual Studio installation issue. Вы можете обновить Dockerfile, чтобы исключить шаг, вызывающий пакетную команду Visual Studio. You can update the Dockerfile to remove the step that calls the Visual Studio batch command. Это позволит запустить контейнер Docker и просмотреть журналы ошибок установки. This enables you to start the Docker container and read the installation error logs.
В файле Dockerfile удалите параметры C:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat и && из команды ENTRYPOINT . In your Dockerfile file, remove the C:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat and && parameters from the ENTRYPOINT command. Теперь команда должна иметь следующий вид: ENTRYPOINT [«powershell.exe», «-NoLogo», «-ExecutionPolicy», «Bypass»] . The command should now be ENTRYPOINT [«powershell.exe», «-NoLogo», «-ExecutionPolicy», «Bypass»] . Затем перестройте Dockerfile и выполните команду run для доступа к файлам контейнера. Next, rebuild the Dockerfile and execute the run command to access container files. Чтобы найти журналы ошибок установки, перейдите в каталог $env:TEMP и откройте файл dd_setup_ _errors.log . To locate the installation error logs, go to the $env:TEMP directory and locate the dd_setup_ _errors.log file.
После определения и устранения проблемы с установкой можно добавить параметры C:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat и && обратно в команду ENTRYPOINT и перестроить Dockerfile. After you identify and fix the installation issue, you can add the C:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat and && parameters back to the ENTRYPOINT command and rebuild your Dockerfile.
Дополнительные сведения см. в статье об известных проблемам с контейнерами. For more information, see Known issues for containers.
Техническая поддержка Get support
Иногда возникают проблемы. Sometimes, things can go wrong. Если установить Visual Studio не удается, воспользуйтесь пошаговыми указаниями в статье Устранение неполадок при установке и обновлении Visual Studio. If your Visual Studio installation fails, see Troubleshoot Visual Studio installation and upgrade issues for step-by-step guidance.
Также доступен чат по вопросам установки, предназначенный для оказания помощи при проблемах с установкой (только на английском языке). We also offer an installation chat (English only) support option for installation-related issues.
Ниже приведены несколько дополнительных вариантов: Here are a few more support options:
- Вы можете сообщить о проблемах с продуктом, используя средство Сообщить о проблеме. Оно доступно как в Visual Studio Installer, так и в IDE Visual Studio. Report product issues to us via the Report a Problem tool that appears both in the Visual Studio Installer and in the Visual Studio IDE.
- Вы можете предлагать новые функции, просматривать описания проблем и искать решения в сообществе разработчиков Visual Studio. Suggest a feature, track product issues, and find answers in the Visual Studio Developer Community.
- Вы также можете связаться с нами и другими разработчиками Visual Studio, используя свою учетную запись GitHub в обсуждении Visual Studio в сообществе Gitter. Use your GitHub account to talk to us and other Visual Studio developers in the Visual Studio conversation in the Gitter community.