빌드 인프라를위한 VM 생성을 자동화하여 다음과 같은 작업을 수행 할 계획입니다.
- 필요에 따라 더 많은 빌드 에이전트를 추가하고 필요하지 않은 경우 제거하여 요구에 따라 빌드 자원을 확장하십시오.
- 기계가 죽었을 때 / 언제 빌드 환경의 전부 또는 일부를 재현
- 테스트 설정이 필요할 때 빌드 환경 복제
이 프로세스의 단계 중 하나는 VM 기본 이미지 생성을 자동화하는 것입니다 (이 경우 Hyper-V 사용). 이를 위해 다음과 같은 스크립트가 있습니다.
- Convert-WindowsImage 스크립트를 사용하여 ISO에서 새로운 VHDX를 만듭니다 . 우리는 현재 Windows 2012R2를 사용하고 있지만 가능한 한 빨리 2016을 시작할 것입니다.
- 필요한 모든 기본 구성으로 무인 스크립트를 새 VHDX에 추가
- Apply-WindowsUpdate 스크립트를 사용하여 최신 Windows 패치로 VHDX를 업데이트합니다.
- VHDX를 기반으로 새 Hyper-V VM을 생성하고 시작합니다
- VM이 부팅되고 WinRM 서비스가 원격 연결을 수락 할 준비가 될 때까지 기다립니다.
- Windows가 초기 구성 및 새 패치 구성을 완료 할 때까지 기다립니다.
- 추가 패치 적용
- 최신 패치 구성을 완료하기 위해 재부팅
- Windows가 패치 구성을 완료 할 때까지 기다립니다.
- sysprep 스크립트를 시스템으로 푸시하고 해당 스크립트를 호출합니다. sysprep를 실행 한 다음 머신을 끕니다.
- VM을 삭제하지만 VHDX는 유지
- VHDX에서 sysprep 및 무인 파일을 제거한 다음 VHDX를 압축합니다.
- VHDX를 템플릿 위치로 이동하고 읽기 전용으로 표시
우리가 겪고있는 문제는 6 단계와 9 단계에 있습니다. 머신을 재부팅 / 종료하기 전에 모든 구성이 완료 될 때까지 기다리는 것이 좋지만 Windows가 구성 단계를 완료 한 것을 감지하는 방법은없는 것 같습니다.
UI를 진행할 때 프로세스가 준비 될 때까지 로그인 UI가 표시되지 않기 때문에 어느 단계가 완료되면 매우 분명합니다. 그러나 WinRM을 사용하여 시스템에 원격으로 연결하는 경우 WinRM이 구성 작업을 수행하기 전에 시스템에 액세스 할 수 있기 때문에 명확하지 않습니다.
따라서 문제는 Windows가 업데이트 구성 등을 완료 한 원격 연결을 통해 탐지하는 가장 바보 같은 방법으로 나중에 문제를 일으키지 않고 컴퓨터를 재부팅 / 종료 할 수 있습니다.
------ 편집하다 -----
결국 우리는 우리의 스크립트는 기다리는에서 캐서린의 대답의 수정 된 버전을 사용 windeploy
하고 ngen
완료합니다. 그 감안할 때 ngen
OS가 작품, 그리고 보너스로 최종 VHDX 우리가 다룰 필요가 없습니다 의미는 .NET Framework NGEN-ED의 모든있을 것이라는 점을 초기화 완료 잘 때까지 완료되지 않은 것을 우리는 새로운 만들 때 템플릿 디스크의 VM VHDX 템플릿 을 만드는 데 사용 하는 스크립트와 로컬 테스트 환경 을 만드는 스크립트 는 모두 관심이있는 경우 github에 있습니다.