本文共 4728 字,大约阅读时间需要 15 分钟。
自动化控制手动,费力且容易出错的流程,并用运行自动化脚本的计算机代替执行手动任务的工程师。 每个人都同意手动流程是DevOps健康心态的敌人。 一些人认为自动化不是一件好事,因为它可以代替辛勤的工程师,而另一些人则意识到,它可以提高一致性,可靠性和效率,节省时间,并且(最重要的是)使工程师能够智能地工作。
“ DevOps不仅是自动化或作为代码的基础架构 ”, 。
那么,什么时候应该自动化?
更重要的是,您不应该自动化什么?
例如,我的团队不断检查我们共同的协作和工程系统上的数百个用户活动,以寻找浪费宝贵资源的闲置状态。 如果某个用户不活跃三个月或更长时间并被分配了昂贵的许可证,我们会将其恢复为功能较弱且免费的许可证。
如图1所示,这不是一个技术难题。 这是一个令人烦恼且容易出错的过程,尤其是在与其他开发和操作任务进行上下文切换时执行该过程时。
顺便说一下,这是通过三个简单步骤创建的价值流图的示例:
如果将这些可视化文件的副本悬挂在人流量大,能见度高的区域,例如团队的分组讨论区,自助餐厅或在通往洗手间的路上,则将引发大量讨论和未经请求的反馈。 例如,从视觉上看,很明显,手动任务是浪费,主要是由于较长的过程等待时间造成的。
让我们探索一个简单的PowerShell脚本,该脚本可以自动执行该过程,如图2所示,将总交付时间从13小时减少到4小时60秒,并将总效率从11.5%提高到12.75%。
是一种基于任务的开源脚本语言。 它 ,基于.NET构建,可让您自动执行Linux,macOS和Windows进程。 具有开发背景,尤其是C#的用户将享受PowerShell的全部好处。
下面的PowerShell脚本示例通过其服务与进行通信。 该脚本结合了图1中的手动列表用户和筛选用户任务,标识了DEMO组织中两个月内没有活动并且正在使用Basic或更昂贵的Basic + Test许可证的所有用户,并输出了用户的控制台的详细信息。 简单!
首先,设置身份验证标头和其他变量,稍后将在此初始化脚本中使用它们:
param( [string] $orgName = "DEMO", [int] $months = "-2", [string] $patToken = "" ) # Basic authentication header using the personal access token (PAT) $basicAuth = ("{0}:{1}" -f "",$patToken) $basicAuth = [System.Text.Encoding]::UTF8.GetBytes($basicAuth) $basicAuth = [System.Convert]::ToBase64String($basicAuth) $headers = @{Authorization=("Basic {0}" -f $basicAuth)} # REST API Request to get all entitlements $request_GetEntitlements = "https://vsaex.dev.azure.com/" + $orgName + "/_apis/userentitlements?top=10000&api-version=5.1-preview.2"; # Initialize data variables $members = New-Object System.Collections.ArrayList [int] $count = 0; [string] $basic = "Basic"; [string] $basicTest = "Basic + Test Plans";
接下来,使用此脚本查询所有权利以标识非活动用户:
# Send the REST API request and initialize the members array list. $response = Invoke-RestMethod -Uri $request_GetEntitlements -headers $headers -Method Get $response.items | ForEach-Object { $members.add($_.id) | out-null } # Iterate through all user entitlements $response.items | ForEach-Object { $name = [string]$_.user.displayName; $date = [DateTime]$_.lastAccessedDate; $expired = Get-Date; $expired = $expired.AddMonths($months); $license = [string]$_.accessLevel.AccountLicenseType; $licenseName = [string]$_.accessLevel.LicenseDisplayName; $count++; if ( $expired -gt $date ) { # Ignore users who have NEVER or NOT YET ACTIVATED their license if ( $date.Year -eq 1 ) { Write-Host " **INACTIVE** " " Name: " $name " Last Access: " $date "License: " $licenseName } # Look for BASIC license elseif ( $licenseName -eq $basic ) { Write-Host " **INACTIVE** " " Name: " $name " Last Access: " $date "License: " $licenseName } } # Look for BASIC + TEST license elseif ( $licenseName -eq $basicTest ) { Write-Host " **INACTIVE** " " Name: " $name " Last Access: " $date "License: " $licenseName } } }
运行脚本时,将获得以下输出,您可以将该输出转发给许可团队以重置用户许可:
**INACTIVE** Name: Demo1 Last Access: 2019/09/06 11:01:26 AM License: Basic **INACTIVE** Name: Demo2 Last Access: 2019/06/04 08:53:15 AM License: Basic **INACTIVE** Name: Demo3 Last Access: 2019/09/26 12:54:57 PM License: Basic **INACTIVE** Name: Demo4 Last Access: 2019/06/07 12:03:18 PM License: Basic **INACTIVE** Name: Demo5 Last Access: 2019/07/18 10:35:11 AM License: Basic **INACTIVE** Name: Demo6 Last Access: 2019/10/03 09:21:20 AM License: Basic **INACTIVE** Name: Demo7 Last Access: 2019/10/02 11:45:55 AM License: Basic **INACTIVE** Name: Demo8 Last Access: 2019/09/20 01:36:29 PM License: Basic + Test Plans **INACTIVE** Name: Demo9 Last Access: 2019/08/28 10:58:22 AM License: Basic
如果自动化最后一步,将用户许可证自动设置为免费的利益相关者许可证,如图3所示,则可以进一步将总交付时间减少到65秒,并将总效率提高到77%。
此PowerShell脚本的核心价值不仅在于能够实现自动化,而且还能够定期 , 一致且快速地执行该过程。 进一步的改进将使用诸如Azure管道之类的调度程序每周或每天触发脚本,但我将在以后的文章中进行程序化许可证重置和脚本调度。
以下是可视化进度的图表:
我希望您喜欢通过自动化,PowerShell,REST API和价值流映射进行的短暂旅程。 请在评论中分享您的想法和反馈。
翻译自:
转载地址:http://uoczd.baihongyu.com/