Tárolóba történő buildeszközök telepítése

A Visual Studio Build Toolst windowsos tárolóba telepítheti a folyamatos integrációs és folyamatos kézbesítési (CI/CD) munkafolyamatok támogatásához. Ez a cikk útmutatást ad a szükséges Docker konfigurációs módosításokról, valamint arról, hogy milyen számítási feladatokat és összetevőket telepíthet egy tárolóba.

tárolók kiválóan alkalmas egy konzisztens buildrendszer csomagolására, amely nem csak CI-/CD-kiszolgálói környezetben, hanem fejlesztői környezetekben is használható. Például csatlakoztathatja a forráskódot egy olyan tárolóba, amelyet egy testre szabott környezet hoz létre, miközben továbbra is a Visual Studiót vagy más eszközöket használja a kód megírásához. Ha a CI/CD-munkafolyamat ugyanazt a tárolórendszerképet használja, biztos lehet benne, hogy a kód következetesen épül fel. A futtatókörnyezet konzisztenciájához tárolókat is használhat, ami gyakori a több tárolót és vezénylési rendszert használó mikroszolgáltatások esetében; ez azonban meghaladja a jelen cikk hatókörét.

Ha a Visual Studio Build Tools nem rendelkezik a forráskód létrehozásához szükséges lépésekkel, ugyanezek a lépések használhatók más Visual Studio-termékekhez is. Vegye figyelembe azonban, hogy a Windows-tárolók nem támogatják az interaktív felhasználói felületet, ezért minden parancsot automatizálni kell.

Mielőtt hozzákezdene

Feltételezzük a Docker ismeretét. Ha nem ismeri, megtudhatja, hogyan telepítheti és konfigurálhatja a Docker-motort Windows.

Az alábbi alaprendszerkép egy minta, és lehet, hogy nem működik a rendszer számára. Olvassa el Windows-tároló verziókompatibilitási annak megállapításához, hogy melyik alaprendszerképet kell használnia a környezetéhez.

Dockerfile előállítása és megépítése

Mentse a következő példa Dockerfile-t egy új fájlba a lemezen. Ha a fájl neve egyszerűen Dockerfile, a rendszer alapértelmezés szerint felismeri.

Figyelmeztetés

Ez a példa Dockerfile csak azokat a korábbi Windows SDK-kat zárja ki, amelyek nem telepíthetők tárolókba. A korábbi kiadások a buildelési parancs meghiúsulását okozzák.

  1. Nyisson meg egy parancssort.

  2. Új könyvtár létrehozása (ajánlott):

    mkdir C:\BuildTools
    
  3. Módosítsa a könyvtárakat erre az új könyvtárra:

    cd C:\BuildTools
    
  4. Mentse a következő tartalmat a C:\BuildTools\Dockerfile fájlba.

    # escape=`
    
    # Use the latest .NET Framework runtime image.
    FROM mcr.microsoft.com/dotnet/framework/runtime:4.8.1-windowsservercore-ltsc2025
    
    # 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/stable/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\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\\BuildTools\\Common7\\Tools\\VsDevCmd.bat", "&&", "powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]
    

    Borravaló

    A 64 bites célzáshoz adja meg a -arch=amd64 beállítást a ENTRYPOINT parancsban a Visual Studio fejlesztői parancssorának elindításához.

    Például: ENTRYPOINT ["C:\\Program Files (x86)\\Microsoft Visual Studio\\BuildTools\\Common7\\Tools\\VsDevCmd.bat", "-arch=amd64", "&&", "powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]

    Figyelmeztetés

    Ha közvetlenül a microsoft/windowsservercorerendszerképre alapozza a rendszerképet, előfordulhat, hogy a .NET-keretrendszer nem megfelelően települ, és nem jelez telepítési hibát. Előfordulhat, hogy a felügyelt kód nem fut a telepítés befejezése után. Ehelyett alapozza a képfájlt a microsoft/dotnet-framework:4.8 vagy újabb verzióra. Azt is vegye figyelembe, hogy a 4.8-as vagy újabb verziójú képek alapértelmezés szerint SHELL a PowerShellt használhatják, ami a RUN és ENTRYPOINT utasítások leállásához vezet.

    Ha tudni szeretné, hogy mely konténer operációs rendszer verziók támogatottak a gazdagép operációs rendszer verzióiban, tekintse meg a Windows konténer verzió-kompatibilitási. Ellenőrizze az ismert problémákat a Windows és a Build Tools tárolók hibaelhárítása , alatt.

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

    Borravaló

    A 64 bites célzáshoz adja meg a -arch=amd64 beállítást a ENTRYPOINT parancsban a Visual Studio fejlesztői parancssorának elindításához.

    Például: ENTRYPOINT ["C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\Common7\\Tools\\VsDevCmd.bat", "-arch=amd64", "&&", "powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]

    Figyelmeztetés

    Ha közvetlenül a microsoft/windowsservercorerendszerképre alapozza a rendszerképet, előfordulhat, hogy a .NET-keretrendszer nem megfelelően települ, és nem jelez telepítési hibát. Előfordulhat, hogy a felügyelt kód nem fut a telepítés befejezése után. Ehelyett alapozza a képfájlt a microsoft/dotnet-framework:4.8 vagy újabb verzióra. Azt is vegye figyelembe, hogy a 4.8-as vagy újabb verziójú képek alapértelmezettként a PowerShellt használják, ami miatt a RUN és ENTRYPOINT utasítások nem működnek.

    Ha tudni szeretné, hogy mely konténer operációs rendszer verziók támogatottak a gazdagép operációs rendszer verzióiban, tekintse meg a Windows konténer verzió-kompatibilitási. Ellenőrizze az ismert problémákat a Windows és a Build Tools tárolók hibaelhárítása , alatt.

    Jegyzet

    A hibakód 3010 az újraindítás sikerességét jelzi. További információ: MsiExec.exe hibaüzenetek.

  5. Futtassa a következő parancsot a könyvtáron belül.

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

    Ez a parancs 2 GB memóriával hozza létre a Dockerfile-t az aktuális könyvtárban. Az alapértelmezett 1 GB nem elegendő bizonyos számítási feladatok telepítésekor; A buildelési követelményektől függően azonban előfordulhat, hogy csak 1 GB memóriával tud buildelést végrehajtani.

    A végső kép buildtools:latest címkével rendelkezik, így egyszerűen futtathatja egy tárolóban, buildtoolokként, mivel a legújabb címke az alapértelmezett, ha nincs megadva címke. Ha a Visual Studio Build Tools egy adott verzióját szeretné használni egy speciális forgatókönyvben, a tárolót egy adott Visual Studio-buildszámmal, valamint legújabb, hogy a tárolók konzisztensen használhassák az adott verziót.

Az elkészült képfájl használata

Most, hogy létrehozott egy képfájlt, futtathatja egy tárolóban az interaktív és az automatizált építések végrehajtásához. A példa a fejlesztői parancssort használja, így a PATH és más környezeti változók már konfigurálva vannak.

  1. Nyisson meg egy parancssort.

  2. Futtasson egy konténert egy PowerShell környezet indításához, mely az összes fejlesztői környezeti változóval van beállítva.

    docker run -it buildtools
    

Ha ezt a képet a CI/CD-munkafolyamathoz szeretné használni, közzéteheti a saját Azure Container Registry--ben vagy más belső Docker-registryben, hogy a kiszolgálóknak csak le kelljen húzniuk.

Jegyzet

Ha a Docker-tároló nem indul el, valószínűleg a Visual Studio telepítésével kapcsolatos probléma merül fel. A Dockerfile frissítésével eltávolíthatja a Visual Studio batch parancsot meghívó lépést. Ezzel elindíthatja a Docker-tárolót, és elolvashatja a telepítési hibanaplókat.

A Dockerfile-fájlban távolítsa el a C:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat és && paramétereket a ENTRYPOINT parancsból. A parancsnak most ENTRYPOINT ["powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]kell lennie. Ezután építse újra a Dockerfile-t, és hajtsa végre a run parancsot a tárolófájlok eléréséhez. A telepítési hibanaplók megkereséséhez lépjen a $env:TEMP könyvtárba, és keresse meg a dd_setup_<timestamp>_errors.log fájlt.

A telepítési probléma azonosítása és megoldása után hozzáadhatja a C:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat és && paramétereket a ENTRYPOINT parancshoz, és újraépítheti a Dockerfile-t.

További információ: Windows- és Build Tools-tárolók hibaelhárítása.

Windows- és buildeszközök tárolóinak hibaelhárítása

A Visual Studio Docker-tárolóba való telepítésekor néhány probléma merül fel.

Windows-tárolók hibaelhárítása

A Visual Studio Build Tools Windows-tárolóba való telepítésekor az alábbi ismert problémák lépnek fel.

  • Adjon meg -m 2GB (vagy többet) a kép létrehozása során. Egyes számítási feladatok telepítésekor az alapértelmezett 1 GB-nál több memóriára van szükség.

  • Konfigurálja a Dockert az alapértelmezett 20 GB-nál nagyobb lemezek használatára.

  • Adja meg a --norestart értéket a parancssorban. A jelen pillanatban a Windows-tárolókat tárolón belül újraindítani próbáló kísérletek ERROR_TOO_MANY_OPEN_FILES visszaküldenek a gazdagépnek.

  • Ha közvetlenül a mcr.microsoft.com/windows/servercore alapozza a rendszerképet, előfordulhat, hogy a .NET-keretrendszer nem települ megfelelően, és nem jelenik meg telepítési hiba. Előfordulhat, hogy a felügyelt kód nem fut a telepítés befejezése után. Ehelyett alapozza a rendszerképet a microsoft/dotnet-framework:4.7.1 vagy újabb verzióra. Például az MSBuild szolgáltatással való építkezés során a következőhöz hasonló hibaüzenet jelenhet meg:

    C:\BuildTools\MSBuild\15.0\bin\Roslyn\Microsoft.CSharp.Core.targets(84,5): hiba MSB6003: A megadott végrehajtható feladat nem futtatható: "csc.exe" nem futtatható. Nem sikerült betölteni a(z) "System.IO.FileSystem, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" fájlt vagy az egyik függőségét. A rendszer nem találja a megadott fájlt.

Build Tools-tárolók hibaelhárítása

A Build Tools-tároló használatakor az alábbi ismert problémák léphetnek fel. Ha tudni szeretné, hogy kijavították-e a problémákat, vagy más ismert problémákat tapasztal, látogasson el fejlesztői közösség.

  • Előfordulhat, hogy az IntelliTrace nem működik tárolón belüli forgatókönyvekben.
  • A WindowsHoz készült Docker régebbi verzióiban az alapértelmezett tárolólemezkép mérete csak 20 GB, és nem felel meg a Build Toolsnak. A utasításokat követve módosíthatja a képméretet 127 GB-ra vagy többre. A lemezterülettel kapcsolatos probléma megerősítéséhez további információt a naplófájlban talál. A vslogs\dd_setup_<timestamp>_errors.log fájl a következőket tartalmazza, ha elfogy a lemezterület:
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.