自动化控制了那些手工的、费力的和容易出错的过程,用运行自动化脚本的计算机代替了执行手工任务的工程师。每个人都认同手工流程是健康的DevOps模式的敌人。一些人认为自动化不是一件好事,因为它取代了辛勤工作的工程师,而另一些人则意识到它提高了一致性、可靠性和效率,节省了时间,(最重要的是)使工程师能够聪明地工作。
自从上个世纪 80年代早期开始使用自动化流程和工具链以来,每当我听到或读到“自动化一切”的建议时,我总是会激动不已。虽然在技术上可以实现一切自动化,但自动化是复杂的,并且需要付出开发、调试和维护方面的代价。如果你曾经重新启用一个许久不用的Azure资源管理器(ARM)模板或很久以前编写的宝贵维护脚本,并期望它在几个月或几年之后仍然能够完美地执行,那么你就会明白,自动化就像任何其他代码一样,是脆弱的,需要持续的维护和培养。
所以,你应该对什么进行自动化并在何时进行自动化?
更重要的是,什么是你不应该自动化的?
举例来说,我的团队使用我们通用的协作和工程系统来不断的监控数百个用户活动。如果一个用户在三个月或者更长时间处于非活动状态,并且这个用户被分配了一个昂贵的许可证,我们就会重分配这个用户一个功能少一些但是免费的许可证。
如图 1 所示,这是一个没有技术挑战性的流程。这是一个令人费解且容易出错的过程,尤其是在执行上下文时与其他开发和运维任务切换时。
图 1 手工流程切换用户许可证
顺带的,这里有一个用简单三步创建的价值流图的例子:
* 总交货时间(TLT)= 13 小时* 总周期时间(TCT) = 1.5 小时* 总效率百分比 = TLT/TCT*100 = 11.5%
如果你在人群流量大和容易看到的区域挂一个这些可视化的副本,比如在你的团队的讨论区、餐厅,或在去洗手间的路上,你将引发大量的讨论和主动反馈。例如,从视觉上看,很明显,手工任务是一种浪费,主要是由于漫长的流程等待时间造成的。
让我们研究一个简单的 PowerShell 脚本,它可以自动化该流程,如图 2 所示,将总交付时间从 13 小时减少到 4 小时加 60 秒,并将总体效率从 11.5 提高到 12.75%。
图 2 半自动化的 PowerShell 脚本切换用户许可
PowerShell 是一种开源的基于任务的脚本语言。它可以在上找到。它构建在 .NET 上,允许你自动化 Linux、macOS 和 Windows 流程。具有开发背景的用户,特别是 C# 用户,将享受到 PowerShell 的全部好处。
下面的 PowerShell 脚本示例通过它的服务与 Azure DevOps 进行通信。脚本结合了在图 1 中的手动列表用户和过滤用户任务,识别了 Demo 组织中的所有两个月没有活动的、使用基本许可证或更昂贵的基本+测试许可证的用户,并将用户的详细信息输出到控制台。很简单!
首先,设置认证标头和其他变量,这些变量将在稍后的初始化脚本中使用:
接下来,使用此脚本查询所有授权,以识别不活动用户:
当你运行脚本时,你将得到以下输出,你可以将其转发给授权团队,以重置用户许可证:
如果你将最后一步自动化,自动将用户许可设置为一个自由的利益相关方许可,如图3所示,你可以进一步将总体交付时间减少到65秒,并将总体效率提高到77%。
图 3 完全自动化的基于 Powershell 的流程来切换用户许可证。
这个 PowerShell 脚本的核心价值不仅在于能够实现 自动化 ,还在于能够 定期 、 持续 和 快速地 执行这个流程。进一步的改进是使用 Azure 管道等调度器每周或每天触发脚本,但我将把程序化的许可证重置和脚本调度保留在未来的文章中。
这里有一个图表,可以直观地看到进展情况:
图 4,措施,措施,措施
我希望你能喜欢这个简短的关于自动化、PowerShell、REST API 和价值流图的介绍。