>根据需求扩展构建资源,例如通过在需要时添加更多构建代理并在不需要时删除它们
>如果/当机器死亡时,重新创建全部或部分构建环境
>在需要测试设置时复制构建环境
此过程中的一个步骤是自动创建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直到操作系统完成初始化之后才能完成,并且作为奖励,最终的VHDX将拥有所有的.NET框架,这意味着我们在创建时不必处理这个问题.模板磁盘的新VM.我们用来创建VHDX template的脚本和创建local test environment的脚本都在github上,以防任何人感兴趣.
There’s a PowerShell script for checking to see if there are available updates for Nagios.如果没有Nagios,您可以将此脚本或变体用于您的目的.
至于它们是否正在进行中,请检查Wuauclt和TrustedInstaller是否正在运行. Microsoft’s advice about updates on Server Core might help here:
Depending on the updates that are installed,you might need to restart
the computer,although the system will not notify you of this. To
determine if the installation process has completed,use Task Manager
to verify that the Wuauclt or Trusted Installer processes are not
actively running. You can also use the methods in the “Viewing
installed updates” section to check the list of installed updates.
你可以用Get-Process -Computername YourImage TrustedInstaller.exe之类的东西来获取这些信息.在Wuauclt和TrustedInstaller进程完成后,重新启动应该是安全的.