SMA 功能深入介绍:Runbook 创作

借助于 Orchestrator 2012 R2 的最新 Service Management Automation (SMA) 功能,IT 专业人员和服务管理员现在可以跨越系统和流程自动执行耗时而又容易出错的重复性任务,从而更快地实现其 Windows Azure 包云操作的价值。SMA 之所以能够实现这种价值,完全依靠所谓的 Runbook 概念 – 包含自动执行 IT 和业务流程的逻辑的 PowerShell 工作流。

虽然起初 Runbook 可能看起来有些可怕,但只需要稍微接受一点培训,人们就能轻松掌握这项技术。在这篇博文中,我们将深入介绍 SMA 为帮助您更有效地编写和使用 Runbook 而提供的一些功能,同时还会介绍一些最佳实践和常见问题解决方法,帮助您真正掌握 Runbook、破茧成蝶。如果尚不具备 SMA 和 SMA Runbook 背景知识,请首先查看 SMARunbook 概念简介文章了解入门信息,然后再继续学习以下内容。

 

Runbook 生命周期

在深入了解 SMA 提供哪些类型的 Runbook 创建和编辑功能之前,我们首先来探讨一下如何管理 Runbook,从而避免您本人或您的同事意外运行正在创建的半成品 Runbook。SMA Runbook 具有“已发布”版本和“草稿”版本的概念之分。当创建新的 Runbook、导入 Runbook 亦或只是单纯希望改进当前的成品 Runbook 时,您使用的 Runbook 是“草稿”版本。您可以随心所欲地调整 Runbook 草稿,保存,关闭浏览器,不久再次返回进行调整,完全不用担心您的同事(或健忘的您)可能会对生产资源尝试运行草稿版本。一旦确定 Runbook 草稿准备好担任主角,就可以进行发布,届时将成为正式的 Runbook 版本。当从门户、命令或另一个 Runbook 启动时将会执行。

需要注意的一点是,当您发布已经具有已发布版本的 Runbook 草稿时,任何已在处理的任何 Runbook 作业将继续使用最初采用的旧的已发布版本进行处理,即便作业先暂停后又恢复也是一样。只有此 Runbook 的新作业(在草稿版本发布后启动)才会使用新发布的版本,从而避免中断当前正在处理的任何现有作业。虽然 SMA 仍会在数据库后台继续存储旧的 Runbook 发布版本,目前我们不会揭示将 Runbook 返回旧的发布版本的方法。但是,如果您确实需要访问旧的发布版本的 Runbook,可以在 SMA 数据库中进行查询,或者采用更简单的方法,即在 WAP 门户中查找使用过该版本的旧作业,单击该作业“History”选项卡,然后通过单击“View Source”查看针对该作业执行的 Runbook 版本来源。

从下方的 Runbook 表屏幕截图中,您可以看到处于“New”、“In edit”和“Published”三种状态的 Runbook。“New”状态意味着 Runbook 只有一个草稿,没有任何成品版本(很可能您近期创建或导入了此 Runbook)。“Published”状态意味着只有成品版本,目前没有创建任何草稿版本。“In edit”状态则意味着 Runbook 既有成品版本又有草稿版本,并且有人目前正在处理草稿版本。注意这会使所选的 Runbook 处于“New”状态,并将禁用“Start”按钮,因为没有可以运行的已发布版本。可以启动“In edit”或“Published”Runbook,因为作者在创建 Runbook 时已经对一个已发布版本进行了认证。

clip_image002

如果进一步查看 Runbook 并选择 Author 选项卡,会发现您可以查看已发布版本和草稿版本的 Runbook,但只能编辑和发布草稿版本。如果未使用创作页面上的“Test”按钮而是从其他什么位置启动此 Runbook,则会运行已发布版本的 Runbook。

clip_image004

clip_image006

如果您的草稿 Runbook 使用子 Runbook,将会运行这些子 Runbook 的已发布版本,即便使用创作页面上的“Test”按钮执行此草稿父 Runbook 也是如此。出于这个原因,当您更新某组父/子 Runbook 时,将需要对每个 Runbook 均做出更改。作为一项最佳实践,建议首先更新、测试和发布子 Runbook,这样当测试父 Runbook 时,将会使用更新后的子 Runbook。另外,由于发布此子 Runbook 草稿将会导致每次调用此 Runbook 时都会运行新发布的版本,请将您的子 Runbook 设置为向后兼容,这样可避免调用此子 Runbook 时中断已发布的现有版本的任何 Runbook。

 

并发编辑

现在,您可能会问自己“但是 Joe,如果其他人在我整理 Runbook 时试图编辑我的草稿 Runbook,该怎么办?”这个问题问得好。我们预测到多位用户共享一项 SMA 安装的情况,并且已经开展了一些工作消除这个问题。虽然我们无法阻止有人尝试编辑他人正在整理的 Runbook,但会在 Runbook 视图上明确显示 Runbook 处于“正在编辑”状态的时间(参见本篇博文的第一个屏幕截图)。作为一项最佳实践,如果您并非 Runbook 草稿的创建人,请不要编辑显示为“正在编辑”状态的 Runbook 的草稿,任其保留为“正在编辑”状态。等到 Runbook 进入“已发布”状态(意味着没有任何草稿,您可以开始开发此 Runbook 的新版本),或者向该 Runbook 草稿的所有人提出请求,与他们共同将您所需的更新编辑到草稿中,或者放弃其草稿以便您进行更新。

 

Runbook 创作功能

现在,我们打开 Runbook 的创作页面,查看它为简化 Runbook 创作而提供的所有出色功能。

clip_image008

您可以从上面的图像中看出,创作页面的草稿选项卡被划分为四个部分:

· 编辑器窗格是您使用 PowerShell 工作流以文本方式创作 Runbook 的区域。

· 输出窗格显示此 Runbook 草稿上一项测试作业的状态和输出。

· 命令栏提供帮助创作 Runbook 的命令。

· Runbook 列表显示您的 SMA 系统中的所有 Runbook,以便您在不同 Runbook 的创作页面间快速导航。

通过使用创作页面命令栏,您可以访问以下任务:

- 管理 –如果意识到需要 Runbook 中尚不存在的某种资产,可以使用此任务在无需离开创作环境的情况下导入模块或创建设置。

- 插入– 将活动、Runbook 或设置插入 Runbook 定义。稍后我们将在本文中详细讨论这项任务。

- 保存– 保存 Runbook 草稿,这样如果离开该页面,只要返回到最新草稿即可从之前中断的位置继续编辑。

- 放弃草稿– 您发现其实无需更新此 Runbook。删除此草稿,这样他人就能为此 Runbook 创建草稿。从技术上而言,有权访问 SMA 环境的任何用户都能放弃 Runbook 的草稿,不仅局限于该草稿的创作者。但是,应该遵循本博文前面的“并发编辑”部分所述的最佳实践,不要随意删除明知并非自身创作的 Runbook 的草稿。

- 测试– 像在生产环境中一样开始运行此草稿 Runbook。这样,Runbook 草稿会在输出窗格中执行并报告输出内容。注意,测试并非假设案例,它们将实际执行 Runbook 应该对其运行的各种资源执行的操作。出于这个原因,只应对非生产资源运行 Runbook 测试。稍后我们将在本文中对测试进行详细介绍。

- 发布 –认证此 Runbook 已经完成并可正常运行;发布当前草稿作为此 Runbook 的最新发布版本。

 

Runbook 编辑器

人们在创作页面上花费的大部分时间都用来使用编辑器窗格。编辑器窗格提供了一款功能强大的创作工具,该工具内置于 Visual Studio Online “Monaco” 控件。通过使用此编辑器,您可以像使用 PowerShell ISE 一样在浏览器中编写 Runbook。该编辑器提供了 PowerShell 语法颜色设置、自动缩进、括号匹配、引用突出显示、自动完成、开发键盘快捷键及限制性智能感知功能。

有关使用编辑器窗格的一些提示

当您开始键入内容时,可能会发现编辑器可以自动完成您键入的字。您可以按 Tab 键切换自动完成选项、按向右箭头接受自动完成,或者同时按 Ctrl + 空格键显示所有自动完成选项的列表,并可在列表中滚动选择自己想要使用的选项。

clip_image009

clip_image010

单击代码中的某个字,将突出显示 Runbook 中使用该字的所有位置,这样就能轻松地查看全部相关引用。

clip_image012

您可以像在常规开发环境中一样使用键盘快捷键,包括:

o 查找/替换 (Ctrl + F)

o 全选 (Ctrl + A)

o 剪切 (Ctrl + X)

o 复制 (Ctrl + C)

o 粘贴 (Ctrl + V)

o 撤销 (Ctrl + Z)

o 恢复 (Ctrl + Y)

o 查看当前字的所有自动完成选项(Ctrl + 空格键)

使用 Ctrl + F 打开 Find 菜单后,即可通过单击 Find 文本框左侧的灰色区域打开 Replace 菜单。按 Enter 键切换匹配项。您可以使用 Esc 键关闭 Find 菜单。

clip_image014

需要注意的一点是,提供通过自动完成显示的选项的智能感知功能通常只能感知编辑器中的内容,而不能感知 PowerShell 中的内容。这意味着,它只会考虑将此 Runbook 中已经使用过的代码作为潜在自动完成建议提供。例如,如果您仔细观察上方显示自动完成下拉菜单的屏幕截图,可能会发现所有这些自动完成选项先前都曾在 Runbook 中使用过。尽管 PowerShell 提供了 “Write-Progress” 命令并且该命令也符合条件,应该显示在自动完成下拉菜单中,但却并未显示,因为人们从未在 Runbook 中使用过该命令。我们将在未来的版本中对智能感知的智能功能进行改进。

 

输出窗格

您可能也会花费相当多的时间来使用输出窗格。在 Runbook 创作期间,您通常会使用命令栏中的测试按钮测试 Runbook 草稿的内容。输出窗格用于显示对此 Runbook 草稿执行的最新测试的状态和输出内容。由于输出窗格与 Runbook 编辑器在同一页面上提供,您可以启动测试并在运行测试的同时继续创作。完成测试后,还可以查看其输出内容并根据需要修改 Runbook 草稿,而且无需切换页面。您可以通过单击输出窗格顶部的蓝条展开/折叠输出窗格,这样既能在需要时查看输出窗格,又能在不需要时腾出更多的屏幕空间进行创作。

clip_image016

我们努力使输出窗格的外观与 PowerShell 窗格看起来尽可能类似。大家可以从上面看到,其中显示了 Runbook 的流输出,对不同的流进行了颜色设置,且设计方法与 PowerShell 平台的颜色设置方法类似。另外,您还可以根据需要停止或暂停 Runbook;如果先前暂停 Runbook 或者意外导致 Runbook 暂停,还可以恢复其运行。与在编辑器窗格中一样,单击输出窗格并按 Ctrl + F 可显示查找菜单,从而帮助您快速搜索想要查找的 Runbook 输出。有关使用输出窗格测试 Runbook 草稿及排除相关故障的高级方法,请参阅 Chris 发布的 Runbook 测试和故障排除文章。

 

Runbook 、活动和设置发现及插入

另一个有用的命令栏选项是“插入”。在下方的屏幕截图中,您可以看到自己可以插入 Runbook、活动或设置。

clip_image017

您可能会问自己,所有这些不同的词都是什么意思?资产、设置、活动、命令、集成模块、PowerShell 模块等。再继续进行介绍之前,我们先花点时间澄清一下术语。这些术语与其他一些术语类似,您可能会造成混淆。

- 资产– 一个或多个 Runbook 依赖的依存关系。它可能是集成模块、凭据、计划,也可能是连接、证书或变量。请关注 Ravi 即将发布的文章,了解有关不同类型的资产的更多信息,

- 设置– 包含由 Runbook 中的一项或多项活动使用的一段或多段信息。凭据、连接、证书和变量都是设置。另外两种资产类型(集成模块和计划)则并非设置。

 

- PowerShell 工作流活动- 如果与纯 PowerShell 技术人员进行交流,那么他们眼中的“活动”是指 PowerShell 工作流活动。PowerShell 工作流活动与 PowerShell 命令的不同之处在于,命令可以通过 Runbook 中的函数和内联脚本进行调用,而 PowerShell 工作流活动却不能这样调用。在 SMA 中,您将会用到的几乎所有功能均作为命令或者命令和 PowerShell 工作流活动实现,因此您无需在使用方面对它们进行区分。但是,RunbookConstructs 集成模块中的所有活动(Runbook 开发的核心)都只能作为 PowerShell 工作流活动实现,因此无法在 Runbook 的内联脚本或函数中使用。有关 PowerShell 工作流活动的更多信息,请参这篇文章(作者:Don Jones)。SMA 提供的 PowerShell 工作流活动的完整列表如下所示:

o Get-AutomationCertificate

o Get-AutomationConnection

o Get-AutomationPSCredential

o Get-AutomationVariable

o Set-AutomationVariable

- SMA 活动– Runbook 中的一项功能。在 SMA 上下文中,当您听到“活动”这个术语时,是指 PowerShell 命令或 PowerShell 工作流活动。术语“活动”自 Orchestrator 衍生而来,并且已经推广应用到 SMA。

 

- PowerShell 模块– 可以从 PowerShell 脚本、工作流和 Runbook 中使用的一组 PowerShell 命令和 PowerShell 工作流活动。

- 集成模块– 可以选择性包含元数据文件(指定 Runbook 中此模块的活动将要使用的 SMA 连接类型)的 PowerShell 模块。我们 SMA 技术人员往往只是简单地将它们简称为“模块”,因为它们只是包含一个额外的可选文件的 PowerShell 模块。术语“集成模块”是 Orchestrator 的术语“集成包”与 PowerShell 的术语“PowerShell 模块”的集合体。请关注 Eamon 即将发布的博文,其中将会对集成模块进行详细介绍。

 

现在,再回头探讨一下插入功能。您可以使用“插入”任务发现能在您的 Runbook 中使用的所有 Runbook、设置和活动,并运用相应的语法插入它们,从而简化创作过程。例如,下方的屏幕截图显示了插入设置向导,在这个屏幕截图中,我选择将名为 “TestVariable” 的变量添加到我的 Runbook 中。大家可以查看该设置的描述和值,如下所示:

clip_image019

单击选中标记可在当前的光标位置,将用于在运行时检索此设置的语法插入我的 Runbook。

clip_image020

clip_image021

内联 Runbook 插入向导与设置插入向导类似:

clip_image023

尽管如此,单击向下箭头将向您显示对应的 Runbook 语法,从而帮助您确定这是否是您要使用的确切 Runbook。

clip_image025

单击该复选框时,会将完整语法插入 Runbook,以便您轻松地填写其参数并于您正在编辑的 Runbook 中通过内联方式使用此 Runbook:

clip_image026

clip_image027

最后但同样重要的是,我们提供了活动插入向导,您可以通过该向导查看 SMA 系统中的所有模块以及所选模块的全部活动。

clip_image029

虽然该向导并未提供内置搜索功能,但您可以使用浏览器的搜索功能 (Ctrl + F) 搜索所需的确切命令。此操作也可以在设置向导和 Runbook 插入向导中完成。

clip_image031

单击活动将显示对应的描述和帮助链接(如果已在 PowerShell 模块中针对此命令指定的话)。

clip_image032

单击“View detailed help”将打开此命令的在线帮助页面,其中会提供有关其使用方法的大量生动详情。小部分帮助页面显示如下:

clip_image034

单击插入活动向导的 Next 按钮将显示一个菜单,与插入 Runbook 向导的语法视图类似。如果此活动包含多个参数集,应当选择希望在 Runbook 中使用的参数集,因为仅会插入该参数集的语法。

clip_image036

clip_image038

小结

希望本文对您有所启示,有助于您了解 SMA 提供用于帮助您在多位 Runbook 创作者和操作者同时工作的环境中尽可能快速简便地创作出色的 Runbook 的大量实用功能。掌握这些知识后,您将成为出色的 SMA Runbook 专家。