【问题标题】:Reacquiring DSC background job after a reboot重新启动后重新获取 DSC 后台作业
【发布时间】:2019-05-27 09:45:59
【问题描述】:

我有一个系统,它每晚执行一堆 DSC 配置来构建机器。这是由 Jenkins 中的计划作业 (MultiJob) 启动的。调度作业然后触发单个作业并等待所有作业完成。 90% 的时间它都可以正常工作。

但是,有时其中一项作业需要重新启动。这已通过 LCM 正确配置并使用 xPendingReboot DSC 资源。这里没有问题。

问题是在目标计算机上执行的 PowerShell 作业在启动重新启动时结束。然后这会触发构建过程的下一个阶段,该阶段失败,因为 DSC 过程实际上尚未完成。

有没有人知道如何在目标机器重新启动后重新获取挂起的 DSC 作业?

更新(未经测试):目前正在处理在作业完成时调用 LCM 上的 GetCimSessionInstanceId 方法以获取会话句柄的方案。然后,此会话 ID 可用于在通过 Get-CimSession cmdlet 重新启动后重新获取远程计算机上的 CimSession。我的假设是我将能够在 cim 会话上远程执行 Get-Job 以确定 DSC 进程是否继续。这导致了一个额外的问题。我们如何确定初始 dsc 作业是由于重新启动而结束还是实际上是进程的结束?

【问题讨论】:

    标签: powershell jenkins dsc


    【解决方案1】:

    这种方法应该适用于您正在寻找的http://nanalakshmanan.github.io/blog/DSC-get-job-details-post-reboot/

    如果您想在重启后从节点获取信息, 将 DSC 设置为在重新启动后不继续。这可以通过使用以下方法来完成 元配置示例

    [DscLocalConfigurationManager()]
    Configuration Settings
    {
       Settings
       {
           ActionAfterReboot  = 'StopConfiguration'  
           RebootNodeIfNeeded = $false  
       }  
    }  
    

    然后使用以下命令重新应用现有配置

    Start-DscConfiguration -Wait -UseExisting -Verbose

    【讨论】:

    • 感谢您的回复,该方法完全有意义。我很快就会试试看。
    • 其他优先事项已优先于此问题。我计划今天晚些时候再讨论这个问题。
    • 发现 1 个小问题。 ActionAfterReboot 需要设置为 "StopConfiguration" 而不是 "Stop"
    猜你喜欢
    • 2014-09-14
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 2014-11-09
    • 2014-04-08
    相关资源
    最近更新 更多