Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Anda dapat menginstal Alat Build Visual Studio ke dalam kontainer Windows untuk mendukung integrasi berkelanjutan dan alur kerja pengiriman berkelanjutan (CI/CD). Artikel ini memandu Anda melalui perubahan konfigurasi Docker apa yang diperlukan, serta beban kerja dan komponen apa yang dapat Anda instal dalam kontainer.
Kontainer adalah cara yang bagus untuk mengemas sistem build yang konsisten yang dapat Anda gunakan, tidak hanya di lingkungan server CI/CD tetapi juga untuk lingkungan pengembangan. Misalnya, Anda dapat memasang kode sumber ke dalam kontainer untuk dibangun oleh lingkungan yang disesuaikan saat Anda terus menggunakan Visual Studio atau alat lain untuk menulis kode Anda. Jika alur kerja CI/CD Anda menggunakan gambar kontainer yang sama, Anda dapat yakin bahwa kode Anda dibangun secara konsisten. Anda juga dapat menggunakan kontainer untuk konsistensi runtime, yang umum digunakan pada layanan mikro dengan beberapa kontainer dan sistem orkestrasi; namun, hal tersebut tidak dibahas dalam artikel ini.
Jika Alat Build Visual Studio tidak memiliki apa yang Anda butuhkan untuk membuat kode sumber, langkah-langkah yang sama ini dapat digunakan untuk produk Visual Studio lainnya. Namun, perhatikan bahwa kontainer Windows tidak mendukung antarmuka pengguna interaktif sehingga semua perintah harus otomatis.
Sebelum Anda mulai
Beberapa keakraban dengan Docker diasumsikan. Jika Anda tidak terbiasa dengannya, pelajari cara menginstal dan mengonfigurasi mesin Docker di Windows.
Gambar dasar berikut adalah sampel dan mungkin tidak berfungsi untuk sistem Anda. Baca kompatibilitas versi kontainer Windows untuk menentukan gambar dasar mana yang harus Anda gunakan untuk lingkungan Anda.
Membuat dan membangun sebuah Dockerfile
Simpan contoh Dockerfile berikut ke file baru di disk Anda. Jika file diberi nama hanya Dockerfile, file tersebut dikenali secara default.
Peringatan
Contoh Dockerfile ini hanya mengecualikan SDK Windows sebelumnya yang tidak dapat diinstal ke dalam kontainer. Rilis sebelumnya menyebabkan perintah build gagal.
Buka jendela perintah.
Buat direktori baru (disarankan):
mkdir C:\BuildToolsUbah direktori ke direktori baru ini:
cd C:\BuildToolsSimpan konten berikut ke 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"]Petunjuk / Saran
Untuk menargetkan 64-bit, tentukan
-arch=amd64opsi dalamENTRYPOINTperintah untuk memulai Perintah Pengembang untuk Visual Studio (VSDevCmd.bat).Misalnya:
ENTRYPOINT ["C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\Common7\\Tools\\VsDevCmd.bat", "-arch=amd64", "&&", "powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]Peringatan
Jika Anda mendasarkan gambar Anda langsung di microsoft/windowsservercore, .NET Framework mungkin tidak diinstal dengan benar, tetapi tidak ada kesalahan penginstalan yang ditunjukkan. Kode terkelola mungkin tidak berjalan setelah penginstalan selesai. Sebagai gantinya, dasarkan gambar Anda pada microsoft/dotnet-framework:4.8 atau lebih baru. Perhatikan juga bahwa gambar yang diberi tag versi 4.8 atau lebih baru mungkin menggunakan PowerShell sebagai
SHELLdefault, yang menyebabkan instruksiRUNdanENTRYPOINTgagal.Untuk mempelajari versi OS kontainer mana yang didukung pada versi OS host mana, lihat Kompatibilitas versi kontainer Windows. Periksa Troubleshooting kontainer Windows dan Build Tools untuk masalah yang sudah diketahui.
Nota
Kode error
3010digunakan untuk menunjukkan keberhasilan dengan syarat perlu reboot. Untuk informasi selengkapnya, lihat MsiExec.exe pesan kesalahan.Jalankan perintah berikut dalam direktori tersebut.
docker build -t buildtools:latest -m 2GB .Perintah ini membangun Dockerfile di direktori saat ini menggunakan memori 2 GB. Kapasitas default 1 GB tidak memadai ketika beberapa beban kerja diinstal; namun, Anda mungkin dapat melakukan build hanya dengan memori 1 GB bergantung pada persyaratan build Anda.
Gambar akhir diberi tag buildtools:latest sehingga Anda dapat dengan mudah menjalankannya dalam kontainer sebagai buildtools karena tag terbaru adalah default jika tidak ada tag yang ditentukan. Jika Anda ingin menggunakan versi Visual Studio Build Tools tertentu dalam skenario yang lebih canggih, Anda mungkin menandai kontainer dengan nomor build Visual Studio tertentu serta yang terbaru sehingga kontainer dapat menggunakan versi tertentu secara konsisten.
Menggunakan gambar bawaan
Setelah membuat gambar, Anda dapat menjalankannya dalam kontainer untuk melakukan build interaktif dan otomatis. Contoh menggunakan Prompt Perintah Pengembang, sehingga PATH Anda dan variabel lingkungan lainnya sudah dikonfigurasi.
Buka jendela perintah.
Jalankan kontainer untuk memulai lingkungan PowerShell dengan semua variabel lingkungan pengembang yang ditetapkan:
docker run -it buildtools
Untuk menggunakan gambar ini untuk alur kerja CI/CD, Anda dapat menerbitkannya ke Azure Container Registry Anda sendiri atau registri Docker internal lainnya sehingga server hanya perlu menariknya.
Nota
Jika kontainer Docker gagal dimulai, kemungkinan ada masalah penginstalan Visual Studio. Anda dapat memperbarui Dockerfile untuk menghapus langkah yang memanggil perintah batch Visual Studio. Ini memungkinkan Anda untuk memulai kontainer Docker dan membaca log kesalahan penginstalan.
Di file Dockerfile Anda, hapus parameter C:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat dan && dari perintah ENTRYPOINT. Perintah sekarang harus ENTRYPOINT ["powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]. Selanjutnya, bangun kembali Dockerfile dan jalankan run perintah untuk mengakses file kontainer. Untuk menemukan log kesalahan penginstalan, buka $env:TEMP direktori dan temukan dd_setup_<timestamp>_errors.log file.
Setelah mengidentifikasi dan memperbaiki masalah penginstalan, Anda dapat menambahkan C:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat parameter dan && kembali ke ENTRYPOINT perintah dan membangun kembali Dockerfile Anda.
Untuk informasi selengkapnya, lihat Pemecahan Masalah kontainer Windows dan Build Tools.
Pemecahan masalah kontainer Windows dan Build Tools
Ada beberapa masalah saat menginstal Visual Studio ke dalam kontainer Docker.
Memecahkan masalah kontainer Windows
Masalah umum berikut terjadi saat Anda menginstal Alat Build Visual Studio ke dalam kontainer Windows.
Teruskan
-m 2GB(atau lebih) saat membangun gambar. Beberapa beban kerja memerlukan lebih banyak memori daripada default 1 GB saat diinstal.Konfigurasikan Docker untuk menggunakan disk yang lebih besar dari default 20 GB.
Teruskan
--norestartpada baris perintah. Saat tulisan ini dibuat, upaya menghidupkan ulang kontainer Windows dari dalam kontainer mengembalikanERROR_TOO_MANY_OPEN_FILESke host.Jika Anda mendasarkan gambar Anda langsung pada mcr.microsoft.com/windows/servercore, .NET Framework mungkin tidak diinstal dengan benar dan tidak ada kesalahan penginstalan yang ditunjukkan. Kode terkelola mungkin tidak berjalan setelah penginstalan selesai. Sebagai gantinya, dasarkan gambar Anda pada microsoft/dotnet-framework:4.7.1 atau yang lebih baru. Sebagai contoh, Anda mungkin melihat kesalahan saat membangun dengan MSBuild yang mirip dengan yang berikut ini:
C:\BuildTools\MSBuild\15.0\bin\Roslyn\Microsoft.CSharp.Core.targets(84,5): kesalahan MSB6003: Tugas eksekusi "csc.exe" yang ditentukan tidak dapat dijalankan. Tidak dapat memuat file atau rakitan 'System.IO.FileSystem, Version=4.0.1.0, Culture=netral, PublicKeyToken=b03f5f7f11d50a3a' atau salah satu dependensinya. Sistem tidak dapat menemukan file yang ditentukan
Memecahkan masalah kontainer Build Tools
Masalah umum berikut mungkin terjadi saat Anda menggunakan kontainer Build Tools. Untuk melihat apakah masalah telah diperbaiki atau jika ada masalah lain yang diketahui, kunjungi Komunitas Pengembang.
- IntelliTrace mungkin tidak berfungsi dalam beberapa skenario dalam kontainer.
- Pada versi Docker untuk Windows yang lebih lama, ukuran gambar kontainer default hanya 20 GB dan tidak sesuai dengan Build Tools. Ikuti petunjuk untuk mengubah ukuran gambar menjadi 127 GB atau lebih.
Untuk mengonfirmasi masalah ruang disk, periksa file log untuk informasi selengkapnya. File Anda
vslogs\dd_setup_<timestamp>_errors.logmenyertakan yang berikut ini jika Anda kehabisan ruang disk:
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.