Chúng tôi dự định tự động hóa việc tạo VM cho cơ sở hạ tầng xây dựng của chúng tôi để chúng tôi có thể:
- Quy mô tài nguyên xây dựng dựa trên nhu cầu, ví dụ: bằng cách thêm nhiều tác nhân xây dựng khi được yêu cầu và loại bỏ chúng khi không cần thiết
- Tái tạo tất cả hoặc một phần của môi trường xây dựng nếu / khi máy chết
- Sao y môi trường xây dựng khi chúng tôi cần thiết lập thử nghiệm
Một trong những bước trong quy trình này là tự động hóa việc tạo các hình ảnh cơ sở VM (trong trường hợp của chúng tôi là sử dụng Hyper-V). Cho rằng chúng tôi có một kịch bản:
- Tạo VHDX mới từ ISO với tập lệnh Convert-WindowsImage . Chúng tôi hiện đang sử dụng Windows 2012R2 nhưng sẽ tìm cách bắt đầu với năm 2016 ngay khi có sẵn.
- Thêm một tập lệnh không giám sát vào VHDX mới với tất cả cấu hình cơ bản chúng ta cần
- Cập nhật VHDX với các bản vá windows mới nhất bằng cách sử dụng tập lệnh Apply-WindowsUpdate
- Tạo một Hyper-V VM mới dựa trên VHDX và khởi động nó
- Chờ VM khởi động và đợi dịch vụ WinRM sẵn sàng chấp nhận kết nối từ xa
- Chờ các cửa sổ hoàn tất cấu hình ban đầu và cấu hình của các bản vá mới
- Áp dụng bất kỳ bản vá nào nữa
- Khởi động lại để hoàn thành cấu hình của các bản vá mới nhất
- Chờ các cửa sổ hoàn tất cấu hình các bản vá
- Đẩy tập lệnh sysprep vào máy và gọi tập lệnh đó. Điều này chạy sysprep và sau đó tắt máy
- Xóa VM nhưng vẫn giữ VHDX
- Loại bỏ các tập tin sysprep và unattend khỏi VHDX và sau đó thu gọn VHDX
- Di chuyển VHDX đến vị trí mẫu và đánh dấu là chỉ đọc
Vấn đề chúng tôi gặp phải là ở bước 6 và 9. Lý tưởng nhất là chúng tôi đợi tất cả cấu hình hoàn tất trước khi chúng tôi khởi động lại / tắt máy nhưng dường như không có cách nào để phát hiện các cửa sổ đã kết thúc giai đoạn cấu hình.
Khi đi qua UI, rất rõ ràng khi một trong hai bước được thực hiện vì UI đăng nhập không hiển thị cho đến khi quá trình sẵn sàng. Tuy nhiên, khi sử dụng WinRM để kết nối từ xa với máy thì điều này không rõ ràng vì WinRM cung cấp quyền truy cập vào máy trước khi nó được thực hiện với công việc cấu hình.
Vì vậy, câu hỏi đặt ra là cách chứng minh ngu ngốc nhất để phát hiện qua kết nối từ xa mà Windows đã hoàn tất cấu hình các bản cập nhật, v.v ... để chúng tôi có thể khởi động lại / tắt máy mà không gây ra sự cố sau này.
------ BIÊN TẬP -----
Cuối cùng, chúng tôi đang sử dụng một phiên bản sửa đổi của câu trả lời của Kinda trong đó kịch bản của chúng tôi cũng đang chờ windeploy
và ngen
hoàn thành. Cho rằng điều ngen
đó không hoàn thành cho đến khi hệ điều hành hoàn thành việc khởi tạo hoạt động và như một phần thưởng, VHDX cuối cùng sẽ có tất cả .NET framework ngen-ed, điều đó có nghĩa là chúng ta không phải đối phó với điều đó khi chúng ta tạo mới VM của đĩa mẫu. Cả hai tập lệnh mà chúng tôi sử dụng để tạo mẫu VHDX và tập lệnh để tạo môi trường kiểm tra cục bộ đều có trên github trong trường hợp có ai quan tâm.