Aracılığıyla paylaş


Derleme Araçları'nı kapsayıcıya yükleme

Sürekli tümleştirme ve sürekli teslim (CI/CD) iş akışlarını desteklemek için windows kapsayıcısına Visual Studio Derleme Araçları yükleyebilirsiniz. Bu makale, hangi Docker yapılandırma değişikliklerinin gerekli olduğu ve kapsayıcıya yükleyebileceğiniz iş yükleri ve bileşenler hakkında size yol gösterir.

Kapsayıcılar , yalnızca CI/CD sunucu ortamında değil, geliştirme ortamları için de kullanabileceğiniz tutarlı bir derleme sistemini paketlemenin harika bir yoludur. Örneğin, kodunuzu yazmak için Visual Studio veya diğer araçları kullanmaya devam ederken, kaynak kodunuzu özelleştirilmiş bir ortam tarafından oluşturulacak bir kapsayıcıya bağlayabilirsiniz. CI/CD iş akışınız aynı kapsayıcı görüntüsünü kullanıyorsa kodunuzun tutarlı bir şekilde derlenmesinden emin olabilirsiniz. Kapsayıcıları çalışma zamanı tutarlılığı için de kullanabilirsiniz. Bu, bir düzenleme sistemiyle birden çok kapsayıcı kullanan mikro hizmetler için ortaktır; ancak, bu makalenin kapsamı dışındadır.

Visual Studio Derleme Araçları kaynak kodunuzu oluşturmak için gerekenlere sahip değilse, bu adımlar diğer Visual Studio ürünleri için de kullanılabilir. Bununla birlikte, Windows kapsayıcılarının etkileşimli bir kullanıcı arabirimini desteklemediğini, bu nedenle tüm komutların otomatikleştirilmiş olması gerektiğini unutmayın.

Başlamadan önce

Docker hakkında biraz bilgi sahibi olduğunuz aşağıda varsayılmıştır. Docker'ı Windows'ta çalıştırmayı bilmiyorsanız Docker altyapısını Windows'a yükleme ve yapılandırma hakkında bilgi edinin.

Aşağıdaki temel görüntü bir örnektir ve sisteminizde çalışmayabilir. Ortamınız için hangi temel görüntüyü kullanmanız gerektiğini belirlemek için Windows kapsayıcı sürümü uyumluluğu makalesini okuyun.

Dockerfile oluşturma ve oluşturma

Aşağıdaki dockerfile örneğini diskinizdeki yeni bir dosyaya kaydedin. Dosya yalnızca "Dockerfile" olarak adlandırılırsa, varsayılan olarak tanınır.

Uyarı

Bu örnek Dockerfile yalnızca kapsayıcılara yüklenemeyen önceki Windows SDK'larını dışlar. Önceki sürümler derleme komutunun başarısız olmasına neden olur.

  1. Komut istemi açın.

  2. Yeni dizin oluşturma (önerilen):

    mkdir C:\BuildTools
    
  3. Dizinleri şu yeni dizinle değiştirin:

    cd C:\BuildTools
    
  4. Aşağıdaki içeriği C:\BuildTools\Dockerfile dosyasına kaydedin.

    # 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"]
    

    İpucu

    64 bit'i hedeflemek için komutta ENTRYPOINT Visual StudioVSDevCmd.bat () için Geliştirici Komut İstemi'ni başlatma seçeneğini belirtin-arch=amd64.

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

    Uyarı

    Görüntünüzü doğrudan microsoft/windowsservercore'a dayandırdıysanız, .NET Framework düzgün yüklenmeyebilir ve yükleme hatası gösterilmez. Yükleme tamamlandıktan sonra yönetilen kod çalışmayabilir. Bunun yerine, görüntünüzü microsoft/dotnet-framework:4.8] veya üzerini temel alın. Ayrıca, sürüm 4.8 veya üzeri etiketli görüntülerin varsayılan SHELLolarak PowerShell kullanabileceğini ve ENTRYPOINT yönergelerinin RUN başarısız olmasına neden olacağını unutmayın.

    Hangi kapsayıcı işletim sistemi sürümlerinin hangi konak işletim sistemi sürümlerinde desteklendiğine bakmak için Bkz . Windows kapsayıcı sürümü uyumluluğu ve bilinen sorunlar için Windows ve Derleme Araçları kapsayıcılarıyla ilgili sorunları giderme.

    # 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"]
    

    İpucu

    64 bit'i hedeflemek için komutta ENTRYPOINT Visual StudioVSDevCmd.bat () için Geliştirici Komut İstemi'ni başlatma seçeneğini belirtin-arch=amd64.

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

    Uyarı

    Görüntünüzü doğrudan microsoft/windowsservercore'a dayandırdıysanız, .NET Framework düzgün yüklenmeyebilir ve yükleme hatası gösterilmez. Yükleme tamamlandıktan sonra yönetilen kod çalışmayabilir. Bunun yerine, görüntünüzü microsoft/dotnet-framework:4.8 veya üzerini temel alın. Ayrıca, sürüm 4.8 veya üzeri etiketli görüntülerin varsayılan SHELLolarak PowerShell kullanabileceğini ve ENTRYPOINT yönergelerinin RUN başarısız olmasına neden olacağını unutmayın.

    Hangi kapsayıcı işletim sistemi sürümlerinin hangi konak işletim sistemi sürümlerinde desteklendiğine bakmak için Bkz . Windows kapsayıcı sürümü uyumluluğu ve bilinen sorunlar için Windows ve Derleme Araçları kapsayıcılarıyla ilgili sorunları giderme.

    Not

    Hata kodu 3010 , yeniden başlatmanın gerekli olduğu başarıyı göstermek için kullanılır, daha fazla bilgi için bkz . MsiExec.exe hata iletileri .

  5. Bu dizinde aşağıdaki komutu çalıştırın.

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

    Bu komut, 2 GB bellek kullanarak dockerfile dosyasını geçerli dizinde oluşturur. Bazı iş yükleri yüklendiğinde varsayılan 1 GB yeterli değildir; ancak, derleme gereksinimlerinize bağlı olarak yalnızca 1 GB bellekle derleme gerçekleştirebilirsiniz.

    Son görüntü etiketlendiğinden buildtools2019:latest bir kapsayıcıda buildtools2019 kolayca çalıştırabilirsiniz çünkü etiket belirtilmezse varsayılan olarak "en son" etiketi kullanılır. daha gelişmiş bir senaryoda Visual Studio Derleme Araçları 2019'un belirli bir sürümünü kullanmak istiyorsanız kapsayıcıların belirli bir sürümü tutarlı bir şekilde kullanabilmesi için kapsayıcıyı belirli bir Visual Studio derleme numarasıyla ve "en son" ile etiketleyebilirsiniz.

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

    Bu komut, 2 GB bellek kullanarak dockerfile dosyasını geçerli dizinde oluşturur. Bazı iş yükleri yüklendiğinde varsayılan 1 GB yeterli değildir; ancak, derleme gereksinimlerinize bağlı olarak yalnızca 1 GB bellekle derleme gerçekleştirebilirsiniz.

    Son görüntü "buildtools:latest" olarak etiketlendiğinden, bir kapsayıcıda "buildtools" olarak kolayca çalıştırabilirsiniz çünkü "en son" etiket belirtilmezse varsayılan etikettir. daha gelişmiş bir senaryoda Visual Studio Derleme Araçları'nin belirli bir sürümünü kullanmak istiyorsanız, kapsayıcıların belirli bir sürümü tutarlı bir şekilde kullanabilmesi için kapsayıcıyı belirli bir Visual Studio derleme numarasıyla ve "en son" ile etiketleyebilirsiniz.

Yerleşik görüntüyü kullanma

Artık bir görüntü oluşturduğunuza göre, hem etkileşimli hem de otomatik derlemeler yapmak için bir kapsayıcıda çalıştırabilirsiniz. Örnek Geliştirici Komut İstemi'ni kullandığından PATH ve diğer ortam değişkenleriniz zaten yapılandırılmıştır.

  1. Komut istemi açın.

  2. Tüm geliştirici ortamı değişkenleri ayarlanmış bir PowerShell ortamı başlatmak için kapsayıcıyı çalıştırın:

    docker run -it buildtools2019
    
    docker run -it buildtools
    

Ci/CD iş akışınızda bu görüntüyü kullanmak için, bu görüntüyü kendi Azure Container Registry'nizde veya diğer iç Docker kayıt defterinizde yayımlayabilirsiniz, böylece sunucuların yalnızca çekmesi gerekir.

Not

Docker kapsayıcısı başlatılamazsa, büyük olasılıkla bir Visual Studio yükleme sorunu vardır. Visual Studio batch komutunu çağıran adımı kaldırmak için Dockerfile dosyasını güncelleştirebilirsiniz. Bu, Docker kapsayıcısını başlatmanızı ve yükleme hata günlüklerini okumanızı sağlar.

Dockerfile dosyanızda ve && parametrelerini komutundan ENTRYPOINT kaldırınC:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat. Komut şimdi olmalıdır ENTRYPOINT ["powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]. Ardından Dockerfile dosyasını yeniden derleyin ve komutunu yürüterek kapsayıcı dosyalarına erişin run . Yükleme hata günlüklerini bulmak için dizine $env:TEMP gidin ve dosyayı bulun dd_setup_<timestamp>_errors.log .

Yükleme sorununu tanımlayıp düzeltdikten sonra ve && parametrelerini komutuna ENTRYPOINT geri ekleyebilir C:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat ve Dockerfile'ınızı yeniden oluşturabilirsiniz.

Daha fazla bilgi için bkz . Windows ve Derleme Araçları kapsayıcılarında sorun giderme.

Windows ve Derleme Araçları kapsayıcılarında sorun giderme

Visual Studio'yu Docker kapsayıcısına yüklerken birkaç sorun vardır.

Windows kapsayıcıları sorunlarını giderme

Windows kapsayıcısına Visual Studio Derleme Araçları yüklediğinizde aşağıdaki bilinen sorunlar oluşur.

  • Görüntüyü oluştururken geçiş -m 2GB (veya daha fazlası). Bazı iş yükleri yüklendiğinde varsayılan 1 GB'tan daha fazla bellek gerektirir.

  • Docker'ı varsayılan 20 GB'tan büyük diskler kullanacak şekilde yapılandırın.

  • Komut satırını geçirin --norestart . Bu yazıdan itibaren, kapsayıcının içinden bir Windows kapsayıcısını yeniden başlatma girişimi konağa döner ERROR_TOO_MANY_OPEN_FILES .

  • Görüntünüzü doğrudan mcr.microsoft.com/windows/servercore temel alırsanız, .NET Framework düzgün yüklenmeyebilir ve yükleme hatası gösterilmez. Yükleme tamamlandıktan sonra yönetilen kod çalışmayabilir. Bunun yerine, görüntünüzü microsoft/dotnet-framework:4.7.1 veya sonraki sürümleri temel alın. Örneğin, MSBuild ile oluştururken aşağıdakine benzer bir hata görebilirsiniz:

    C:\BuildTools\MSBuild\15.0\bin\Roslyn\Microsoft.CSharp.Core.targets(84,5): hata MSB6003: Belirtilen görev yürütülebilir dosyası "csc.exe" çalıştırılamadı. 'System.IO.FileSystem, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' dosyası veya derlemesi veya bağımlılıklarından biri yüklenemedi. Sistem belirtilen dosyayı bulamıyor.

Derleme Araçları kapsayıcılarında sorun giderme

Derleme Araçları kapsayıcısı kullandığınızda aşağıdaki bilinen sorunlar oluşabilir. Sorunların düzeltilip düzeltildiğini veya bilinen başka sorunlar olup olmadığını görmek için Geliştirici Topluluğu adresini ziyaret edin.

  • IntelliTrace, kapsayıcı içindeki bazı senaryolarda çalışmayabilir.
  • Windows için Docker'ın eski sürümlerinde varsayılan kapsayıcı görüntüsü boyutu yalnızca 20 GB'tır ve Derleme Araçları'na uymaz. Görüntü boyutunu 127 GB veya daha fazla olarak değiştirmek için yönergeleri izleyin. Disk alanı sorununu onaylamak için daha fazla bilgi için günlük dosyalarına bakın. Disk alanınız tükenirse dosyanızda vslogs\dd_setup_<timestamp>_errors.log aşağıdakiler yer alır:
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.