组织层面的自动化一直是一个难以实现的目标，但 Kubernetes 或许能够改变这一切。当我在 2002 年采用 Gentoo Linux 作为我的主要操作系统时，我开始了我的自动化之旅。二十年后，自动化还没有完成。当我与客户和合作伙伴会面时，他们分享了团队内部的自动化成果，但他们也描述了在组织层面实现类似成功所面临的挑战。大多数 IT 组织都能够端到端地提供虚拟机，从而将过去 4 周的交付周期缩短到仅 5 分钟。这种级别的自动化本身就是一个复杂的工作流程，需要网络（IP 地址管理、DNS、代理、网络区域等）、身份访问管理、虚拟机管理程序、存储、备份、更新操作系统、应用最新的配置文件、监控、安全和强化以及合规性基准测试，等等。哇，这么多！满足高速、可扩展和按需自动化的业务需求并不容易。例如，来看看经典的网上商店或提交纳税申报表的在线政府服务，其工作负载有明确的峰值需要面对。处理此类负载的一种常见方法是拥有一个超大的服务器集群，以供 IT 专业人员的特定团队使用，监控客户或公民的季节性涌入。每个人都希望及时部署整个栈。他们希望基础架构在混合云场景的上下文中运行工作负载，使用“ 构建-消耗-回收 build-consume-trash ”模型来优化成本，同时从无限弹性中受益。换句话说，每个人都想要乌托邦式的“云体验”。云真的能交付吗？尚有一线机会，这主要归功于 Kubernetes 的设计方式。Kubernetes 的指数级普及推动了创新，取代了管理平台和应用的标准传统做法。 Kubernetes 需要使用 “ 万物皆代码 Everything-as-Code ”（EaC）来定义从简单的计算节点到 TLS 证书的所有资源的期望状态。Kubernetes 强制使用三种主要的设计结构：一个标准接口，以减少内部和外部组件之间的整合问题API 优先及仅 API 的方法来标准化其所有组件的 CRUD（创建、读取、更新、删除）操作使用 YAML 作为通用语言，以简单易读的方式定义这些组件的所有所需状态这三个关键组成部分基本上是选择自动化平台的相同要求，至少如果你想让跨职能团队轻松采用是这样的。这也模糊了团队之间的职责分工，有助于提高跨越孤岛的协作，这是一件好事！事实上，采用 Kubernetes 的客户和合作伙伴正在加速进入超自动化状态。Kubernetes 有机地推动团队采用多种 DevOps 基础和实践，如：EaC、使用 Git 进行版本控制、同行评审、 文档即代码 Documentation as Code ，并鼓励跨职能协作。这些实践有助于提高团队的自动化技能，并帮助团队在处理应用生命周期和基础架构的 GitOps 和 CI/CD 管道方面取得良好的开端。让自动化成为现实你没看错！网络商店或政府报告等复杂系统的整个栈可以用清晰、可理解、通用的术语定义，可以在任何本地或云提供商上执行。可以定义具有自定义指标的自动伸缩器以触发所需栈的即时部署，以解决季节性高峰期间客户或市民的涌入问题。当指标恢复正常，且云计算资源不再有存在的理由时，你将它们回收并恢复常规运营，而由一组核心资产在本地接管业务，直到下一次激增。鸡和蛋的悖论考虑到 Kubernetes 和云原生模式，自动化是必须的。但它提出了一个重要的问题：一个组织可以在解决自动化战略之前采用 Kubernetes 吗？似乎从 Kubernetes 开始可以激发更好的自动化，但这并不是一个一成不变的结论。工具不是对技能、实践和文化问题的解决方案。但是，设计良好的平台可以成为 IT 组织内学习、变革和跨职能协作的催化剂。开始使用 Kubernetes即使你觉得自己错过了自动化列车，也不要害怕从简单、不复杂的栈上开始使用 Kubernetes。当你 掌握了初始步骤，就可以拥抱这个出色的编排系统的简单性，并根据更复杂的需求进行迭代。via: https://opensource.com/article/22/10/kubernetes-solve-automation-challenges作者：Rom Adams 选题：lkxed 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
Bash 有一些方便的自动化功能，可以让我在 Linux 上处理文件时更轻松。通过 Bash 命令行进行自动化任务是极好的一种方式。不论你使用运行在服务器上的 Linux 进行管理日志文件或其他文件，还是你在个人电脑上整理文件以使桌面保持整洁，使用 Bash 的自动化功能会使你的工作变得更轻松。自动执行文件任务：for如果你对一堆文件要同时处理，并且对每个文件进行相同的操作，请使用 for 命令。该命令会遍历文件列表，并执行一个或多个命令。for 命令如下所示：for 变量 in 列表 do 命令 done 我在示例中添加了额外的空白和换行，来分开 for 命令中不同的部分。看起来好像无法在命令行中同时运行多个命令，不过你可以使用 ; 将所有命令放在同一行中，就像这样:for 变量 in 列表 ; do 命令 ; done 让我们看看它的实际效果。我使用 for 命令来重命名一些文件。最近，我有一些截图，想要重命名。这些截图名称为 filemgr.png 或 terminal.png，我想将 screenshot 放在每个名称前。我可以使用 for 命令一次性将 30 个文件重命名。这是两个文件的示例：$ ls filemgr.png terminal.png $ for f in *.png ; do mv $f screenshot-$f ; done $ ls screenshot-filemgr.png screenshot-terminal.png for 命令使得在一系列文件中执行一种或多种操作变得容易。你可以用一些有意义的变量名，比如 image 或 screenshot，或者你用示例中“缩写的”变量 f。当我在使用 for 循环写脚本的时候，会选择有意义的变量名。但是当我在命令行中使用 for，我通常会选择缩写变量名，比如 f 代表文件，d 代表目录等。不论你选择怎样的变量名，请确保在引用变量时添加 $ 符号。这会将变量扩展为你正在处理的文件的名称。在 Bash 提示符下键入 help for 以了解有关 for 命令的更多信息。按条件执行：if当你需要对每个文件执行相同操作时，使用 for 循环遍历一些文件很有帮助。但是，如果你需要对某些文件做一些不同的事情怎么办？为此，你需要使用 if 语句进行条件执行。if 语句如下所示：if 测试 then 命令 fi 你也可以使用 if、else 语句进行判断：if 测试 then 命令 else 命令 fi 你可以使用 if、elif、else 语句来实现更复杂的程序。当我一次性需要自动处理很多文件时，我会在脚本中使用：if 测试1 then 命令 elif 测试2 then 命令 elif 测试3 then 命令 else 命令 fi if 命令可以让你进行各种判断，例如判断一个文件是否是一个文件，或者一个文件是否为空文件（零字节）。在命令行中输入 help test，可以立即查看使用 if 语句能够进行的各种测试。例如，假设我想清理一个包含几十个文件的日志目录。日志管理中的一个常见任务是删除所有空日志文件，并压缩其他日志。解决这个问题的最简单方法是删除空文件。没有可以完全匹配的 if 测试，但是我们有 -s 选项来判断是否是一个文件，并且判断该文件不是空的（大小不为零）。这与我们想要的相反，但我们可以使用 ! 来否定测试，以判断某些内容不是文件或为空。让我们用一个示例来看看这个过程。我创建了两个测试文件：一个是空的，另一个包含一些数据。我们可以使用 if 判断，如果文件为空打印消息 empty：$ ls datafile emptyfile $ if [ ! -s datafile ] ; then echo "empty" ; fi $ if [ ! -s emptyfile ] ; then echo "empty" ; fi empty 我们可以将 if 和 for 命令结合起来，检查日志文件列表中的空文件并删除：$ ls -l total 20 -rw-rw-r--. 1 jhall jhall 2 Jul 1 01:02 log.1 -rw-rw-r--. 1 jhall jhall 2 Jul 2 01:02 log.2 -rw-rw-r--. 1 jhall jhall 2 Jul 3 01:02 log.3 -rw-rw-r--. 1 jhall jhall 0 Jul 4 01:02 log.4 -rw-rw-r--. 1 jhall jhall 2 Jul 5 01:02 log.5 -rw-rw-r--. 1 jhall jhall 0 Jul 6 01:02 log.6 -rw-rw-r--. 1 jhall jhall 2 Jul 7 01:02 log.7 $ for f in log.* ; do if [ ! -s $f ] ; then rm -v $f ; fi ; done removed 'log.4' removed 'log.6' $ ls -l total 20 -rw-rw-r--. 1 jhall jhall 2 Jul 1 01:02 log.1 -rw-rw-r--. 1 jhall jhall 2 Jul 2 01:02 log.2 -rw-rw-r--. 1 jhall jhall 2 Jul 3 01:02 log.3 -rw-rw-r--. 1 jhall jhall 2 Jul 5 01:02 log.5 -rw-rw-r--. 1 jhall jhall 2 Jul 7 01:02 log.7 使用 if 命令可以在需要时执行一些操作，使脚本变得智能。我经常会在脚本中使用 if，当我需要判断文件在我的系统上存在或不存在时，或者判断脚本正在检查的条目是文件或目录时。使用 if 使得脚本能够根据需要采取不同的操作。via: https://opensource.com/article/22/7/use-bash-automate-tasks-linux作者：Jim Hall 选题：lkxed 译者：Donkey-Hao 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
随着自动化扩展到涵盖 IT 的更多方面，越来越多的管理员正在学习自动化技能并应用它们来减轻他们的工作量。自动化可以减轻重复性任务的负担，并为基础设施增加一定程度的一致性。但是，当 IT 工作人员部署自动化时，会出现可能对大大小小的基础设施造成严重破坏的常见错误。在自动化部署中通常会出现五个常见错误。缺乏测试初学者常犯的错误是自动化脚本没有经过全面测试。由于拼写错误或逻辑错误，简单的 shell 脚本可能会对服务器产生不利影响。将该错误乘以基础架构中的服务器数量，你可能会遇到一大堆问题需要清理。在大规模部署之前始终测试你的自动化脚本。意外负载经常发生的第二个错误是没有预测脚本可能对其他资源施加的系统负载。当目标是十几个服务器时，运行从仓库下载文件或安装包的脚本可能没问题。脚本通常在成百上千台服务器上运行。这种负载可以使支持服务停止或完全崩溃。不要忘记考虑端点影响或设置合理的并发率。离开脚本自动化工具的一种用途是确保符合标准设置。自动化可以轻松确保组中的每台服务器都具有完全相同的设置。如果该组中的服务器需要根据该基线进行更改，同时管理员不了解合规标准，那么可能会出现问题。安装和启用不需要和不想要的服务，从而导致可能的安全问题。缺乏文档管理员的一项固定职责应该是记录他们的工作。由于合同到期、升职或定期员工流动，公司可能会在 IT 部门频繁招聘新员工。公司内的工作组相互隔离也很常见。由于这些原因，重要的是记录哪些自动化已经到位。与用户运行脚本不同，自动化可能会在创建它的人离开组之后继续很长时间。管理员可能会发现自己在其基础设施中面临着来自未经检查的自动化的奇怪行为。缺乏经验列表中的最后一个错误是管理员对他们正在自动化的系统不够了解。管理员经常被雇用到他们没有接受过足够培训且没有人可以求教的职位上工作。自 COVID 以来，当公司努力填补空缺时，这一点尤其重要。然后管理员被迫处理他们没有设置并且可能不完全理解的基础设施。这可能会导致非常低效的脚本浪费资源或配置错误的服务器。结论越来越多的管理员正在学习自动化来帮助他们完成日常任务。因此，自动化正被应用于更多的技术领域。希望此列表将有助于防止新用户犯这些错误，并敦促经验丰富的管理员重新评估他们的 IT 策略。自动化旨在减轻重复性任务的负担，而不是为最终用户带来更多工作。via: https://fedoramagazine.org/five-common-mistakes-when-using-automation/作者：Gary Scarborough 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
使用 Powershell 来自动化 Linux、macOS 以及 Windows 流程
自动化是 DevOps 的关键，但是，是否任何事都可以自动化？自动化控制了那些手工的、费力的和容易出错的过程，用运行自动化脚本的计算机代替了执行手工任务的工程师。每个人都认同手工流程是健康的 DevOps 模式的敌人。一些人认为自动化不是一件好事，因为它取代了辛勤工作的工程师，而另一些人则意识到它提高了一致性、可靠性和效率，节省了时间，（最重要的是）使工程师能够聪明地工作。“DevOps 并不只是自动化或者基础架构即代码。” — Donovan Brown自从上个世纪 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 是一种开源的基于任务的脚本语言。它可以在 GitHub 上找到。它构建在 .NET 上，允许你自动化 Linux、macOS 和 Windows 流程。具有开发背景的用户，特别是 C# 用户，将享受到 PowerShell 的全部好处。下面的 PowerShell 脚本示例通过它的服务 REST API 与 Azure DevOps 进行通信。脚本结合了在图 1 中的手动列表用户和过滤用户任务，识别了 Demo 组织中的所有两个月没有活动的、使用基本许可证或更昂贵的基本+测试许可证的用户，并将用户的详细信息输出到控制台。很简单！首先，设置认证标头和其他变量，这些变量将在稍后的初始化脚本中使用：param( [string] $orgName = "DEMO", [int] $months = "-2", [string] $patToken = "<PAT>" ) # 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%。图 3 完全自动化的基于 Powershell 的流程来切换用户许可证。这个 PowerShell 脚本的核心价值不仅在于能够实现 自动化，还在于能够 定期、持续 和 快速地 执行这个流程。进一步的改进是使用 Azure 管道等调度器每周或每天触发脚本，但我将把程序化的许可证重置和脚本调度保留在未来的文章中。这里有一个图表，可以直观地看到进展情况：图 4，措施，措施，措施我希望你能喜欢这个简短的关于自动化、PowerShell、REST API 和价值流图的介绍。请在评论中分享你的想法和反馈。via: https://opensource.com/article/20/2/devops-automation作者：Willy-Peter Schaub 选题：lujun9972 译者：FigaroCao 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
有了 anacron，我可以把脚本和 Ansible 剧本放到合适的地方，以完成各种琐碎的任务。自动化是伟大的 IT 和 DevOps 理想，但根据我的经验，可能根本不存在什么不方便的东西。有很多次，我为某些任务想出了一个很好的解决方案，我甚至会编写脚本，但我没有让它真正实现自动化，因为在我工作的机器上不存在易于自动化的基础设施。我最喜欢的简易自动化工具曾经是 cron 系统，它古老、可靠、面向用户，而且简单（除了一个我永远无法记住的调度语法之外）。然而，cron 的问题是，它假定一台电脑每天 24 小时都在工作。在错过了太多预定的备份之后，我发现了 anacron，一个基于时间戳而非预定时间的 cron 系统。如果你的电脑在通常情况下运行时处于关闭状态，anacron 会确保它在电脑重新开启时运行。创建一个作业只需要简单地把一个 shell 脚本放到三个目录中：cron.day、cron.weekly 或者 cron.monthly （如果你想的话，你可以定义更多）。有了 anacron，我发现自己把脚本和 Ansible 剧本用在了各种琐碎的任务中，包括弹出到期和事件提醒。这是一个现代问题的简单而明显的解决方案，但如果 anacron 没有安装在电脑上，那它对我就没有用。用 Ansible 进行软件设置任何时候我设置一台新的计算机，无论是笔记本电脑、工作站还是服务器，我都会安装 anacron。这很简单，但是 anacron 的安装只提供了 anacron 命令。它并没有设置 anacron 的用户环境。所以我创建了一个 Ansible 剧本来设置用户需要什么来使用 anacron 并安装 anacron 命令。首先，标准的 Ansible 模板：--- - hosts: localhost tasks: 用 Ansible 创建目录接下来，我创建了用于 Anacron 的目录树。你可以把它看成是一种透明的 crontab。 - name: create directory tree ansible.builtin.file: path: "{{ item }}" state: directory with_items: - '~/.local/etc/cron.daily' - '~/.local/etc/cron.weekly' - '~/.local/etc/cron.monthly' - '~/.var/spool/anacron' 这个语法可能看起来有点奇怪，但它实际上是一个循环。with_items: 指令定义了四个要创建的目录，Ansible 在 ansible.buildin.file: 指令中为每个目录迭代一次（目录名填充了 {{ item }} 变量）。与 Ansible 中的一切一样，如果目录已经存在，不会有错误或冲突。用 Ansible 复制文件ansible.buildin.copy 模块将文件从一个地方复制到另一个地方。为了让它工作，我需要创建一个叫做 anacrontab 的文件。它不是 Ansible 剧本，所以我把它放在我的 ~/Ansible/data 目录下，那里是我的剧本的支持文件。 - name: copy anacrontab into place ansible.builtin.copy: src: ~/Ansible/data/anacrontab dest: ~/.local/etc/anacrontab mode: '0755' 我的 anacrontab 文件很简单，模仿了一些发行版默认安装在 /etc/anacron 中的文件：SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin 1 0 cron.day run-parts $HOME/.local/etc/cron.daily/ 7 0 cron.wek run-parts $HOME/.local/etc/cron.weekly/ 30 0 cron.mon run-parts $HOME/.local/etc/cron.monthly/ 登录时运行 anacron大多数 Linux 发行版将 anacron 配置为从 /etc/anacron 读取作业。我主要是作为一个普通用户使用 anacron，所以我从我的登录账号 ~/.profile 启动 anacron。我不想让自己记住这些配置，所以我让 Ansible 来做。我使用 ansible.buildin.lineinfile 模块，它会在 ~/.profile 不存在时创建它，并插入 anacron 的启动行。 - name: add local anacrontab to .profile ansible.builtin.lineinfile: path: ~/.profile regexp: '^/usr/sbin/anacron' line: '/usr/sbin/anacron -t ~/.local/etc/anacrontab' create: true 用 Ansible 安装 anacron对于我的大多数系统来说，dnf 模块可以用来安装软件包，但我的工作站运行的是 Slackware（使用 slackpkg），有时不同的 Linux 发行版也会进入我的收藏。ansible.buildin.package 模块提供了一个安装软件包的通用接口，所以我把它用在这个剧本上。幸运的是，我还没有遇到一个名为 anacron 的仓库不是 anacron，所以现在，我不必考虑软件包名称的潜在差异。这实际上是一个单独的剧本，因为软件包的安装需要权限升级，它由 becomes: true 指令提供。- hosts: localhost become: true tasks: - name: install anacron ansible.builtin.package: name: anacron state: present 使用 anacron 和 Ansible 实现轻松自动化为了用 Ansible 安装 anacron，我运行该剧本：$ ansible-playbook ~/Ansible/setup-anacron.yaml 从此，我就可以编写 shell 脚本来执行一些琐碎但重复的任务，然后把它复制到 ~/.local/etc/cron.daily，让它每天自动运行一次（或者大约如此）。我还为诸如 清理下载文件夹 之类的任务编写了 Ansible 剧本。我把我的剧本放在 ~/Ansible 里，这是我保存 Ansible 剧本的地方，然后在 ~/.local/etc/cron.daily 里创建一个 shell 脚本来执行这个剧本。这很简单，不费吹灰之力，而且很快成为习惯。via: https://opensource.com/article/21/9/ansible-anacron-automation作者：Seth Kenlon 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
用 AutoKey 配置你的键盘，纠正常见的错别字，输入常用的短语等等。AutoKey 是一个开源的 Linux 桌面自动化工具，一旦它成为你工作流程的一部分，你就会想，如何没有它，那该怎么办。它可以成为一种提高生产率的变革性工具，或者仅仅是减少与打字有关的身体压力的一种方式。本文将研究如何安装和开始使用 AutoKey ，介绍一些可以立即在工作流程中使用的简单方法，并探讨 AutoKey 高级用户可能会感兴趣的一些高级功能。安装并设置 AutoKeyAutoKey 在许多 Linux 发行版中都是现成的软件包。该项目的 安装指南 包含许多平台的说明，也包括了从源代码进行构建的指导。本文使用 Fedora 作为操作平台。AutoKey 有两个变体：为像 GNOME 等基于 GTK 环境而设计的 autokey-gtk 和基于 QT 的 autokey-qt。你可以从命令行安装任一变体：sudo dnf install autokey-gtk 安装完成后，使用 autokey-gtk（或 autokey-qt）运行它。探究界面在将 AutoKey 设置为在后台运行并自动执行操作之前，你首先需要对其进行配置。调出用户界面（UI）配置：autokey-gtk -c AutoKey 提供了一些预设配置的示例。你可能希望在熟悉 UI 时将他们留作备用，但是可以根据需要删除它们。左侧窗格包含一个文件夹式的短语和脚本的层次结构。“ 短语 Phrases ” 代表要让 AutoKey 输入的文本。“ 脚本 Scripts ” 是动态的、程序化的等效项，可以使用 Python 编写，并且获得与键盘击键发送到活动窗口基本相同的结果。右侧窗格构建和配置短语和脚本。对配置满意后，你可能希望在登录时自动运行 AutoKey，这样就不必每次都启动它。你可以通过在 “ 首选项 Preferences ”菜单（“ 编辑 -> 首选项 Edit -> Preferences” ”）中勾选 “ 登录时自动启动 AutoKey Automatically start AutoKey at login ”进行配置。使用 AutoKey 纠正常见的打字排版错误修复常见的打字排版错误对于 AutoKey 来说是一个容易解决的问题。例如，我始终键入 “gerp” 来代替 “grep”。这里是如何配置 AutoKey 为你解决这些类型问题。创建一个新的子文件夹，可以在其中将所有“打字排版错误校正”配置分组。在左侧窗格中选择 “My Phrases” ，然后选择 “ 文件 -> 新建 -> 子文件夹 File -> New -> Subfolder ”。将子文件夹命名为 “Typos”。在 “ 文件 -> 新建 -> 短语 File -> New -> Phrase ” 中创建一个新短语。并将其称为 “grep”。通过高亮选择短语 “grep”，然后在 输入短语内容 Enter phrase contents 部分（替换默认的 “Enter phrase contents” 文本）中输入 “grep” ，配置 AutoKey 插入正确的关键词。接下来，通过定义缩写来设置 AutoKey 如何触发此短语。点击用户界面底部紧邻 “ 缩写 Abbreviations ” 的 “ 设置 Set ”按钮。在弹出的对话框中，单击 “ 添加 Add ” 按钮，然后将 “gerp” 添加为新的缩写。勾选 “ 删除键入的缩写 Remove typed abbreviation ”；此选项让 AutoKey 将任何键入 “gerp” 一词的替换为 “grep”。请不要勾选“ 在键入单词的一部分时触发 Trigger when typed as part of a word ”，这样，如果你键入包含 “grep”的单词（例如 “fingerprint”），就不会尝试将其转换为 “fingreprint”。仅当将 “grep” 作为独立的单词键入时，此功能才有效。限制对特定应用程序的更正你可能希望仅在某些应用程序（例如终端窗口）中打字排版错误时才应用校正。你可以通过设置 窗口过滤器 Window Filter 进行配置。单击 “ 设置 Set ” 按钮来定义。设置 窗口过滤器 Window Filter 的最简单方法是让 AutoKey 为你检测窗口类型：启动一个新的终端窗口。返回 AutoKey，单击 “ 检测窗口属性 Detect Window Properties ”按钮。单击终端窗口。这将自动填充窗口过滤器，可能的窗口类值为 gnome-terminal-server.Gnome-terminal。这足够了，因此单击 “OK”。保存并测试对新配置满意后，请确保将其保存。 单击 “ 文件 File ” ，然后选择 “ 保存 （ Save ） ” 以使更改生效。现在进行重要的测试！在你的终端窗口中，键入 “gerp” 紧跟一个空格，它将自动更正为 “grep”。要验证窗口过滤器是否正在运行，请尝试在浏览器 URL 栏或其他应用程序中键入单词 “gerp”。它并没有变化。你可能会认为，使用 shell 别名 可以轻松解决此问题，我完全赞成！与别名不同，只要是面向命令行，无论你使用什么应用程序，AutoKey 都可以按规则纠正错误。例如，我在浏览器，集成开发环境和终端中输入的另一个常见打字错误 “openshfit” 替代为 “openshift”。别名不能完全解决此问题，而 AutoKey 可以在任何情况下纠正它。键入常用短语你可以通过许多其他方法来调用 AutoKey 的短语来帮助你。例如，作为从事 OpenShift 的站点可靠性工程师（SRE），我经常在命令行上输入 Kubernetes 命名空间名称：oc get pods -n openshift-managed-upgrade-operator 这些名称空间是静态的，因此它们是键入特定命令时 AutoKey 可以为我插入的理想短语。为此，我创建了一个名为 “Namespaces” 的短语子文件夹，并为我经常键入的每个命名空间添加了一个短语条目。分配热键接下来，也是最关键的一点，我为子文件夹分配了一个 “ 热键 hotkey ”。每当我按下该热键时，它都会打开一个菜单，我可以在其中选择（要么使用 “方向键”+回车键要么使用数字）要插入的短语。这减少了我仅需几次击键就可以输入这些命令的击键次数。“My Phrases” 文件夹中 AutoKey 的预配置示例使用 Ctrl+F7 热键进行配置。如果你将示例保留在 AutoKey 的默认配置中，请尝试一下。你应该在此处看到所有可用短语的菜单。使用数字或箭头键选择所需的项目。高级自动键入AutoKey 的 脚本引擎 允许用户运行可以通过相同的缩写和热键系统调用的 Python 脚本。这些脚本可以通过支持的 API 的函数来完成诸如切换窗口、发送按键或执行鼠标单击之类的操作。AutoKey 用户非常欢迎这项功能，发布了自定义脚本供其他用户采用。例如，NumpadIME 脚本 将数字键盘转换为旧的手机样式的文本输入方法，Emojis-AutoKey 可以通过将诸如: :smile: 之类的短语转换为它们等价的表情符号来轻松插入。这是我设置的一个小脚本，该脚本进入 Tmux 的复制模式，以将前一行中的第一个单词复制到粘贴缓冲区中：from time import sleep # 发送 Tmux 命令前缀（b 更改为 s） keyboard.send_keys("<ctr>+s") # Enter copy mode keyboard.send_key("[") sleep(0.01) # Move cursor up one line keyboard.send_keys("k") sleep(0.01) # Move cursor to start of line keyboard.send_keys("0") sleep(0.01) # Start mark keyboard.send_keys(" ") sleep(0.01) # Move cursor to end of word keyboard.send_keys("e") sleep(0.01) # Add to copy buffer keyboard.send_keys("<ctrl>+m") 之所以有 sleep 函数，是因为 Tmux 有时无法跟上 AutoKey 发送击键的速度，并且它们对整体执行时间的影响可忽略不计。使用 AutoKey 自动化我希望你喜欢这篇使用 AutoKey 进行键盘自动化的探索，它为你提供了有关如何改善工作流程的一些好主意。如果你在使用 AutoKey 时有什么有用的或新颖的方法，一定要在下面的评论中分享。via: https://opensource.com/article/21/2/linux-autokey作者：Matt Bargenquast 选题：lujun9972 译者：stevenzdg988 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
想要在你的自动化项目上达成强 ROI？采取如下步骤来规避失败。在过去的几年间，有关自动化技术的讨论已经很多了。COO 们和运营团队（事实上还有其它的业务部门）对于可以重新定义成本随着工作量的增加而增加的这一事实而感到震惊。 机器人流程自动化 Robotic Process Automation （RPA）似乎预示着运营的 圣杯 Holy Grail ：“我们提供了开箱即用的功能来满足你的日常操作所需 —— 检查电子邮件、保存附件、取数据、更新表格、生成报告、文件以及目录操作。构建一个机器人就像配置这些功能一样简单，然后用机器人将这些操作链接到一起，而不用去请求 IT 部门来构建它们。”这是一个多么诱人的话题。低成本、几乎不出错、非常遵守流程 —— 对 COO 们和运营领导来说，这些好处真实可及。RPA 工具承诺，它从运营中节省下来的费用就足够支付它的成本（有一个短的回报期），这一事实使得业务的观点更具有吸引力。自动化的谈论都趋向于类似的话题：COO 们和他们的团队想知道，自动化操作能够给他们带来什么好处。他们想知道 RPA 平台特性和功能，以及自动化在现实中的真实案例。从这一点到概念验证的实现过程通常很短暂。 在实现人工智能技术方面的建议，可以查看我们相关的文章，[制定你的人工智能策略：3 个小提示]。但是自动化带来的现实好处有时候可能比你所预期的时间要晚。采用 RPA 的公司在其实施后可能会对它们自身的 ROI 提出一些质疑。一些人没有看到预期之中的成本节省，并对其中的原因感到疑惑。你是不是自动化了错误的东西？在这些情况下，自动化的愿景和现实之间的差距是什么呢？我们来分析一下它，在决定去继续进行一个自动化验证项目（甚至是一个成熟的实践）之后，我们来看一下通常会发生什么。在确定实施自动化所采用的路径之后，COO 一般会问运营领导和他的团队们，应该在哪个流程或者任务上实施自动化。虽然从原则上说应该鼓励他们参与进来，但是有时候这种方式产生的决策往往会产生一个次优选择。原因如下：首先，团队领导经常会是“视野较窄”：他们对自己的流程和任务非常熟悉，但是对他们不参与的流程和任务并不是那么熟悉（特别是在他们没有太多运营经验的情况下）。这意味着他们在自己的工作领域内可能会找出比较适合自动化的候选者，但是在跨整个运营的其它领域中可能并不一定会找出最适合的。另外其它的像“我希望我的流程成为第一个实施自动化的候选者”这样的“软性”因素也会影响决定。其次，候选流程的选择有时候会被自动化特性和能力的匹配度所支配，而不是根据自动化所带来的价值所决定的。一个常见的误解是，任何包括像电子邮件或目录监视、下载、计算等活动的任务都是自动化的最佳候选者。如果对这些任务实施自动化不能为组织产生价值，那么它们就不是正确的候选者。那么，对于领导们来说，怎么才能确保实施自动化能够带来他们想要的 ROI 呢？实现这个目标有四步：1. 教育团队在你的团队中，从 COO 职位以下的人中，很有可能都听说过 RPA 和运营自动化。同样很有可能他们都有许多的问题和担心。在你开始启动实施之前解决这些问题和担心是非常重要的。对运营团队进行积极的教育可以大大地提升他们对自动化的热情和信心。培训主要关注于自动化和机器人是什么，它们在流程中一般扮演什么样的角色，哪个流程和任务最适合自动化，以及自动化的预期好处是什么。建议：邀请你的自动化合作伙伴去进行这些团队教育工作，你要有所控制：他们可能会非常乐意帮助你。在领导层将这些传播到更大范围的团队之前，你应该对他们的教育内容进行把关。“实施自动化的第一步是更好地理解你的流程。”2. 审查内部流程实施自动化的第一步是更好地理解你的流程。每个 RPA 实施之前都应该进行流程清单、动作分析、以及成本/价值的绘制练习。这些练习对于理解流程中何处产生价值（或成本，如果没有价值的情况下）是至关重要的。并且这些练习需要在每个流程或者每个任务这样的粒度级别上来做。这将有助你去识别和优先考虑最合适的自动化候选者。由于能够或者可能需要自动化的任务数量较多，流程一般需要分段实施自动化，因此优先级很重要。建议：设置一个小的工作团队，每个运营团队都参与其中。从每个运营团队中提名一个协调人 —— 一般是运营团队的领导或者团队管理者。在团队级别上组织一次研讨会，去构建流程清单、识别候选流程、以及推动购买。你的自动化合作伙伴很可能有“加速器” —— 调查问卷、计分卡等等 —— 这些将帮助你加速完成这项活动。3. 为优先业务提供强有力的指导实施自动化经常会涉及到在运营团队之间，基于业务价值对流程选择和自动化优先级上要达成共识（有时候是打破平衡）虽然团队的参与仍然是分析和实施的关键部分，但是领导仍然应该是最终的决策者。建议：安排定期会议从工作团队中获取最新信息。除了像推动达成共识和购买之外，工作团队还应该在团队层面上去查看领导们关于 ROI、平台选择、以及自动化优先级上的指导性决定。4. 应该推动 CIO 和 COO 的紧密合作当运营团队和技术团队紧密合作时，自动化的实施将异常顺利。COO 需要去帮助推动与 CIO 团队的合作。COO 和其他运营领导人的参与和监督对成功实施自动化是至关重要的。建议：COO 和 CIO 团队应该与第三方的自动化合作伙伴共同设立一个联合工作组（一个“战场”）。对每个参与者的责任进行明确的界定并持续跟踪。理想情况下，COO 和 CIO 应该至少有一个投入到联合工作组中，至少在初始发布中应该是这样。自动化可以为组织创造重要的价值。然而为了在自动化中获得最优的投资回报，CIO 们必须在“入坑”之前做好规划。via: https://enterprisersproject.com/article/2017/11/how-improve-roi-automation-4-tips作者：Rajesh Kamath 译者：qhwdw 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
自动化专家分享了一点对 自动化不远的将来的看法。请将这些保留在你的视线之内。我们最近讨论了 推动 IT 自动化的因素，可以看到当前趋势正在增长，以及那些给刚开始使用自动化部分流程的组织的 有用的技巧 。噢，我们也分享了如何在贵公司进行自动化的案例及 长期成功的关键的专家建议。现在，只有一个问题：自动化的下一步是什么? 我们邀请一系列专家分享一下 自动化不远的将来的看法。 以下是他们建议 IT 领域领导需密切关注的六大趋势。1、 机器学习的成熟对于关于 机器学习（与“自我学习系统”相似的定义）的讨论，对于绝大多数组织的项目来说，实际执行起来它仍然为时过早。但预计这将发生变化，机器学习将在下一次 IT 自动化浪潮中将扮演着至关重要的角色。Advanced Systems Concepts, Inc. 公司的工程总监 Mehul Amin 指出机器学习是 IT 自动化下一个关键增长领域之一。“随着数据化的发展，自动化软件理应可以自我决策，否则这就是开发人员的责任了”，Amin 说。 “例如，开发者构建了需要执行的内容，但通过使用来自系统内部分析的软件，可以确定执行该流程的最佳系统。”假设将这个系统延伸到其他地方中。Amin 指出，机器学习可以使自动化系统在必要的时候提供额外的资源，以需要满足时间线或 SLA，同样在不需要资源以及其他的可能性的时候退出。显然不只有 Amin 一个人这样认为。“IT 自动化正在走向自我学习的方向” ，Sungard Availability Services 公司首席架构师 Kiran Chitturi 表示，“系统将会能测试和监控自己，加强业务流程和软件交付能力。”Chitturi 指出自动化测试就是个例子。脚本测试已经被广泛采用，但很快这些自动化测试流程将会更容易学习，更快发展，例如开发出新的代码或将更为广泛地影响生产环境。2、 人工智能催生的自动化上述原则同样适合与相关的（但是独立的） 人工智能的领域。根据对人工智能的定义，机器学习在短时间内可能会对 IT 领域产生巨大的影响（并且我们可能会看到这两个领域的许多重叠的定义和理解）。假定新兴的人工智能技术将也会产生新的自动化机会。SolarWinds 公司技术负责人 Patrick Hubbard 说，“人工智能和机器学习的整合普遍被认为对未来几年的商业成功起至关重要的作用。”3、 这并不意味着不再需要人力让我们试着安慰一下那些不知所措的人：前两种趋势并不一定意味着我们将失去工作。这很可能意味着各种角色的改变，以及全新角色的创造。但是在可预见的将来，至少，你不必需要对机器人鞠躬。“一台机器只能运行在给定的环境变量中——它不能选择包含新的变量，在今天只有人类可以这样做，” Hubbard 解释说。“但是，对于 IT 专业人员来说，这将需要培养 AI 和自动化技能，如对程序设计、编程、管理人工智能和机器学习功能算法的基本理解，以及用强大的安全状态面对更复杂的网络攻击。”Hubbard 分享一些新的工具或功能例子，例如支持人工智能的安全软件或机器学习的应用程序，这些应用程序可以远程发现石油管道中的维护需求。两者都可以提高效益和效果，自然不会代替需要信息安全或管道维护的人员。“许多新功能仍需要人工监控，”Hubbard 说。“例如，为了让机器确定一些‘预测’是否可能成为‘规律’，人为的管理是必要的。”即使你把机器学习和 AI 先放在一边，看待一般的 IT 自动化，同样原理也是成立的，尤其是在软件开发生命周期中。Juniper Networks 公司自动化首席架构师 Matthew Oswalt ，指出 IT 自动化增长的根本原因是它通过减少操作基础设施所需的人工工作量来创造直接价值。在代码上，操作工程师可以使用事件驱动的自动化提前定义他们的工作流程，而不是在凌晨 3 点来应对基础设施的问题。“它也将操作工作流程作为代码而不再是容易过时的文档或系统知识阶段，”Oswalt 解释说。“操作人员仍然需要在[自动化]工具响应事件方面后发挥积极作用。采用自动化的下一个阶段是建立一个能够跨 IT 频谱识别发生的有趣事件的系统，并以自主方式进行响应。在代码上，操作工程师可以使用事件驱动的自动化提前定义他们的工作流程，而不是在凌晨 3 点来应对基础设施的问题。他们可以依靠这个系统在任何时候以同样的方式作出回应。”4、 对自动化的焦虑将会减少SolarWinds 公司的 Hubbard 指出，“自动化”一词本身就产生大量的不确定性和担忧，不仅仅是在 IT 领域，而且是跨专业领域，他说这种担忧是合理的。但一些随之而来的担忧可能被夸大了，甚至与科技产业本身共存。现实可能实际上是这方面的镇静力：当自动化的实际实施和实践帮助人们认识到这个列表中的第 3 项时，我们将看到第 4 项的出现。“今年我们可能会看到对自动化焦虑的减少，更多的组织开始接受人工智能和机器学习作为增加现有人力资源的一种方式，”Hubbard 说。“自动化历史上为更多的工作创造了空间，通过降低成本和时间来完成较小任务，并将劳动力重新集中到无法自动化并需要人力的事情上。人工智能和机器学习也是如此。”自动化还将减少令 IT 领导者神经紧张的一些焦虑：安全。正如红帽公司首席架构师 Matt Smith 最近指出的那样，自动化将越来越多地帮助 IT 部门降低与维护任务相关的安全风险。他的建议是：“首先在维护活动期间记录和自动化 IT 资产之间的交互。通过依靠自动化，您不仅可以消除之前需要大量手动操作和手术技巧的任务，还可以降低人为错误的风险，并展示当您的 IT 组织采纳变更和新工作方法时可能发生的情况。最终，这将迅速减少对应用安全补丁的抵制。而且它还可以帮助您的企业在下一次重大安全事件中摆脱头条新闻。”* 阅读全文: [12个企业安全坏习惯要打破。 ] *5、 脚本和自动化工具将持续发展许多组织看到了增加自动化的第一步，通常以脚本或自动化工具（有时称为配置管理工具）的形式作为“早期”工作。但是随着各种自动化技术的使用，对这些工具的观点也在不断发展。DataVision 首席运营官 Mark Abolafia 表示：“数据中心环境中存在很多重复性过程，容易出现人为错误，Ansible 等技术有助于缓解这些问题。“通过 Ansible ，人们可以为一组操作编写特定的步骤，并输入不同的变量，例如地址等，使过去长时间的过程链实现自动化，而这些过程以前都需要人为触摸和更长的交付时间。”想了解更多关于 Ansible 这个方面的知识吗？阅读相关文章：[使用 Ansible 时的成功秘诀。 ]另一个因素是：工具本身将继续变得更先进。“使用先进的 IT 自动化工具，开发人员将能够在更短的时间内构建和自动化工作流程，减少易出错的编码，” ASCI 公司的 Amin 说。“这些工具包括预先构建的、预先测试过的拖放式集成，API 作业，丰富的变量使用，参考功能和对象修订历史记录。”6、 自动化开创了新的指标机会正如我们在此前所说的那样，IT 自动化不是万能的。它不会修复被破坏的流程，或者以其他方式为您的组织提供全面的灵丹妙药。这也是持续不断的：自动化并不排除衡量性能的必要性。 参见我们的相关文章 [DevOps 指标：你在衡量什么重要吗？ ]实际上，自动化应该打开了新的机会。Janeiro Digital 公司架构师总裁 Josh Collins 说，“随着越来越多的开发活动 —— 源代码管理、DevOps 管道、工作项目跟踪等转向 API 驱动的平台，将这些原始数据拼接在一起以描绘组织效率提升的机会和图景”。Collins 认为这是一种可能的新型“开发组织度量指标”。但不要误认为这意味着机器和算法可以突然预测 IT 所做的一切。“无论是衡量个人资源还是整体团队，这些指标都可以很强大 —— 但应该用大量的背景来衡量。”Collins 说，“将这些数据用于高层次趋势并确认定性观察 —— 而不是临床评级你的团队。”想要更多这样知识， IT 领导者？注册我们的每周电子邮件通讯。via: https://enterprisersproject.com/article/2018/3/what-s-next-it-automation-6-trends-watch作者：Kevin Casey 译者：MZqk 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
想要你的整个团队都登上 IT 自动化之旅吗？ IT 执行者们分享了他们的战略。在任何重要的项目或主动变更刚开始的时候，IT 的管理者在前进的道路上面临着普遍的抉择。第一条路径看上去是提供了一个从 A 到 B 的最短路径：简单的把项目强制分配给每个人去执行，本质来说就是你要么按照要求去做要么就不要做了。第二条路径可能看上去会不是很直接，因为要通过这条路径你需要花时间去解释项目背后的策略以及原因。你会沿着这条路线设置停靠站点而不是从起点到终点的马拉松：“这就是我们正在做的 —— 和为什么我们这么做。”猜想一下哪条路径会赢得更好的结果？如果你选的是路径 2，你肯定是以前都经历过这两条路径——而且经历了第一次的结局。让人们参与到重大变革中总会是最明智的选择。IT 领导者也知道重大的变革总会带来严重的恐慌、怀疑，和其他的挑战。IT 自动化确实是很正确的改变。这个术语对某些人来说是很可怕的，而且容易被曲解。帮助人们理解你的公司需要 IT 自动化的必要性的原因以及如何去实现是达到你的目标和策略的重要步骤。阅读我们的相关文章，[IT自动化最佳实践：持久成功的7个关键点。]考虑到这一点，我们咨询了许多 IT 管理者关于如何在你的组织中实现 IT 自动化。1、向人们展示它的优点我们要面对的一点事实是：自我利益和自我保护是本能。利用人们的这种本能是一个吸引他们的好方法：向他们展示自动化策略将如何让他们和他们的工作获益。自动化将会是软件管道中的一个特定过程意味着将会减少在半夜呼叫团队同事来解决故障？它将能让一些人丢弃技术含量低的技能，用更有策略、高效的有序工作代替手工作业，这将会帮助他们的职业生涯更进一步？“向他们传达他们能得到什么好处，自动化将会如何让他们的客户和公司受益，”来自 ADP 全球首席技术官 vipual Nagrath 的建议。“将现在的状态和未来光明的未来进行对比，展现公司将会变得如何稳定，敏捷，高效和安全。”这样的方法同样适用于 IT 领域之外的其他领域；只要在向非技术领域的股东们解读利益的时候解释清楚一些术语即可，Nagrath 说道。设置好前后的情景是一个不错的帮助人们理解的更透彻的故事机。“你要描述一幅人们能够联想到的当前状态的画面，” Nagrath 说。“描述现在是什么工作，但也要重点强调是什么导致团队的工作效率不够敏捷。”然后再阐释自动化过程将如何提高现在的状态。2、将自动化和特定的商业目标绑定在一起一个强有力的案列的一部分要确保人们理解你不只是在追逐潮流趋势。如果只是为了自动化而自动化，人们会很快察觉到进而会更加抵制的——也许在 IT 界更是如此。“自动化需要商业需求的驱动，例如收入和运营开销，” Cyxtera的副总裁和首席信息安全官 David Emerson 说道。“没有自动化的努力是自我辩护的，而且任何技术专长都不应该被当做一种手段，除非它是公司的一项核心能力。”像 Nagrath 一样，Emerson 建议将达到自动化的商业目标和奖励措施挂钩，用迭代式的循序渐进的方式推进这些目标和相关的激励措施。3、 将自动化计划分解为可管理的条目即使你的自动化策略字面上是“一切都自动化”，对大多数组织来说那也是很艰难的，而且可能是没有灵活性的。你需要制定一个强有力的方案，将自动化目标分解为可管理的目标计划。而且这将能够创造很大的灵活性来适应之后漫长的道路。“当制定一个自动化方案的时候，我建议详细的阐明推进自动化进程的奖励措施，而且允许迭代朝着目标前进来介绍和证明利益处于一个低风险水平，”Emerson 说道。GA Connector 的创始人 Sergey Zuev 分享了一个为什么自动化如此重要的快节奏体验的报告——它将怎样为你的策略建立一个强壮持久的论点。Zuevz 应该知道：他的公司的自动化工具将公司的客户关系应用数据导入谷歌分析。但实际上是公司的内部经验使顾客培训进程自动化从而出现了一个闪耀的时刻。“起初， 我们曾尝试去建立整个培训机制，结果这个项目搁浅了好几个月，”Zuev 说道。“认识到这将无法继续下去之后，我们决定挑选其中的一个能够有巨大的时效的领域，而且立即启动。结果我们只用了一周就实现了其中的电子邮件序列的目标，而且我们已经从被亵渎的体力劳动中获益。”4、 出售主要部分也有好处循序渐进的方法并不会阻碍构建一个宏伟的蓝图。就像以个人或者团队的水平来制定方案是一个好主意，帮助人们理解全公司的利益也是一个不错的主意。“如果我们能够加速达到商业需求所需的时间，那么一切质疑将会平息。”AHEAD 的首席技术官 Eric Kaplan 赞同通过小范围的胜利来展示自动化的价值是一个赢得人心的聪明策略。但是那些所谓的“小的”的价值揭示能够帮助你提高人们的整体形象。Kaplan 指出个人和组织间的价值是每个人都可以容易联系到的领域。“最能展现的地方就是你能够节约多少时间，”Kaaplan 说。“如果我们能够加速达到商业需求所需的时间，那么一切质疑将会消失。”时间和可伸缩性是业务和 IT 同事的强大优势，都复制业务的增长，可以把握。“自动化的结果是灵活伸缩的——每个人只需较少的努力就能保持和改善你的 IT 环境”，红帽的全球服务副总裁 John Allessio 最近提到。“如果增加人力是提升你的商业的唯一途径，那么灵活伸缩就是白日梦。自动化减少了你的人力需求而且提供了 IT 演进所需的灵活性和韧性。”(详细内容请参考他的文章，[DevOps 团队对 CIO 的真正需求是什么。])5、 推广你的成果。在你自动化策略的开始时，你可能是在目标和要达到目标的预期利益上制定方案。但随着你的自动化策略的不断演进，没有什么能够比现实中的实际结果令人信服。“眼见为实，”ADP 的首席技术官 Nagrath 说。“没有什么比追踪记录能够平息质疑。”那意味着，不仅仅要达到你的目标，还要准时的完成——这是迭代的循序渐进的方法论的另一个不错的解释。而量化的结果如比利润的提高或者成本的节省可以大声宣扬出来，Nagrath 建议他的 IT 领导者同行在讲述你们的自动化故事的时候不要仅仅止步于此。为自动化提供案例也是一个定性的讨论，通过它我们能够促进问题的预防，归总商业的连续性，减伤失败或错误，而且能够在他们处理更有价值的任务时承担更多的责任。via: https://enterprisersproject.com/article/2018/1/how-make-case-it-automation作者：Kevin Casey 译者：FelixYFZ 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
当要管理远程机器或者要布署应用时，虽然你有多种命令行工具可以选择，但是其中很多工具都缺少详细的使用文档。在这篇教程中，我们将会一步一步地向你介绍如何使用 fabric 来帮助你更好得管理多台服务器。使用 Fabric 来自动化地管理 Linux 任务Fabric 是一个用 Python 编写的命令行工具库，它可以帮助系统管理员高效地执行某些任务，比如通过 SSH 到多台机器上执行某些命令，远程布署应用等。在使用之前，如果你拥有使用 Python 的经验能帮你更好的使用 Fabric。当然，如果没有那也不影响使用 Fabric。我们为什么要选择 Fabric：简单完备的文档如果你会 Python，不用增加学习其他语言的成本易于安装使用使用便捷支持多台机器并行操作在 Linux 上如何安装 FabricFabric 有一个特点就是要远程操作的机器只需要支持标准的 OpenSSH 服务即可。只要保证在机器上安装并开启了这个服务就能使用 Fabric 来管理机器。依赖Python 2.5 或更新版本，以及对应的开发组件Python-setuptools 和 pip（可选，但是非常推荐）gcc我们推荐使用 pip 安装 Fabric，但是你也可以使用系统自带的包管理器如 yum, dnf 或 apt-get 来安装，包名一般是 fabric 或 python-fabric。如果是基于 RHEL/CentOS 的发行版本的系统，你可以使用系统自带的 EPEL 源 来安装 fabric。# yum install fabric [适用于基于 RedHat 系统] # dnf install fabric [适用于 Fedora 22+ 版本] 如果你是 Debian 或者其派生的系统如 Ubuntu 和 Mint 的用户，你可以使用 apt-get 来安装，如下所示：# apt-get install fabric 如果你要安装开发版的 Fabric，你需要安装 pip 来安装 master 分支上最新版本。# yum install python-pip [适用于基于 RedHat 系统] # dnf install python-pip [适用于Fedora 22+ 版本] # apt-get install python-pip [适用于基于 Debian 系统] 安装好 pip 后，你可以使用 pip 获取最新版本的 Fabric。# pip install fabric 如何使用 Fabric 来自动化管理 Linux 任务现在我们来开始使用 Fabric，在之前的安装的过程中，Fabric Python 脚本已经被放到我们的系统目录，当我们要运行 Fabric 时输入 fab 命令即可。在本地 Linux 机器上运行命令行按照惯例，先用你喜欢的编辑器创建一个名为 fabfile.py 的 Python 脚本。你可以使用其他名字来命名脚本，但是就需要指定这个脚本的路径，如下所示：# fabric --fabfile /path/to/the/file.py Fabric 使用 fabfile.py 来执行任务，这个文件应该放在你执行 Fabric 命令的目录里面。例子 1：创建入门的 Hello World 任务：# vi fabfile.py 在文件内输入如下内容：def hello(): print('Hello world, Tecmint community') 保存文件并执行以下命令：# fab hello Fabric 工具使用说明例子 2：新建一个名为 fabfile.py 的文件并打开：粘贴以下代码至文件：#! /usr/bin/env python from fabric.api import local def uptime(): local('uptime') 保存文件并执行以下命令：# fab uptime Fabric: 检查系统运行时间让我们看看这个例子，fabfile.py 文件在本机执行了 uptime 这个命令。在远程 Linux 机器上运行命令来执行自动化任务Fabric API 使用了一个名为 env 的关联数组（Python 中的词典）作为配置目录，来储存 Fabric 要控制的机器的相关信息。env.hosts 是一个用来存储你要执行 Fabric 任务的机器的列表，如果你的 IP 地址是 192.168.0.0，想要用 Fabric 来管理地址为 192.168.0.2 和 192.168.0.6 的机器，需要的配置如下所示：#!/usr/bin/env python from fabric.api import env env.hosts = [ '192.168.0.2', '192.168.0.6' ] 上面这几行代码只是声明了你要执行 Fabric 任务的主机地址，但是实际上并没有执行任何任务，下面我们就来定义一些任务。Fabric 提供了一系列可以与远程服务器交互的方法。Fabric 提供了众多的方法，这里列出几个经常会用到的：run - 可以在远程机器上运行的 shell 命令local - 可以在本机上运行的 shell 命令sudo - 使用 root 权限在远程机器上运行的 shell 命令get - 从远程机器上下载一个或多个文件put - 上传一个或多个文件到远程机器例子 3：在多台机子上输出信息，新建新的 fabfile.py 文件如下所示#!/usr/bin/env python from fabric.api import env, run env.hosts = ['192.168.0.2','192.168.0.6'] def echo(): run("echo -n 'Hello, you are tuned to Tecmint ' ") 运行以下命令执行 Fabric 任务# fab echo fabric: 自动在远程 Linux 机器上执行任务例子 4：你可以继续改进之前创建的执行 uptime 任务的 fabfile.py 文件，让它可以在多台服务器上运行 uptime 命令，也可以检查其磁盘使用情况，如下所示：#!/usr/bin/env python from fabric.api import env, run env.hosts = ['192.168.0.2','192.168.0.6'] def uptime(): run('uptime') def disk_space(): run('df -h') 保存并执行以下命令# fab uptime # fab disk_space Fabric：自动在多台服务器上执行任务在远程服务器上自动化布署 LAMP例子 5：我们来尝试一下在远程服务器上布署 LAMP（Linux, Apache, MySQL/MariaDB and PHP）我们要写个函数在远程使用 root 权限安装 LAMP。在 RHEL/CentOS 或 Fedora 上#!/usr/bin/env python from fabric.api import env, run env.hosts = ['192.168.0.2','192.168.0.6'] def deploy_lamp(): run ("yum install -y httpd mariadb-server php php-mysql") 在 Debian/Ubuntu 或 Linux Mint 上#!/usr/bin/env python from fabric.api import env, run env.hosts = ['192.168.0.2','192.168.0.6'] def deploy_lamp(): sudo("apt-get install -q apache2 mysql-server libapache2-mod-php5 php5-mysql") 保存并执行以下命令：# fab deploy_lamp 注：由于安装时会输出大量信息，这个例子我们就不提供屏幕 gif 图了现在你可以使用 Fabric 和上文例子所示的功能来自动化的管理 Linux 服务器上的任务了。一些 Fabric 有用的选项你可以运行 fab -help 输出帮助信息，里面列出了所有可以使用的命令行信息–fabfile=PATH 选项可以让你定义除了名为 fabfile.py 之外的模块如果你想用指定的用户名登录远程主机，请使用 -user=USER 选项如果你需要密码进行验证或者 sudo 提权，请使用 –password=PASSWORD 选项如果需要输出某个命令的详细信息，请使用 –display=命令名 选项使用 --list 输出所有可用的任务使用 --list-format=FORMAT 选项能格式化 -list 选项输出的信息，可选的有 short、normal、 nested--config=PATH 选项可以指定读取配置文件的地址-–colorize-errors 能显示彩色的错误输出信息--version 输出当前版本总结Fabric 是一个强大并且文档完备的工具，对于新手来说也能很快上手，阅读提供的文档能帮助你更好的了解它。如果你在安装和使用 Fabric 时发现什么问题可以在评论区留言，我们会及时回复。参考：Fabric 文档via: http://www.tecmint.com/automating-linux-system-administration-tasks/作者：Aaron Kili 译者：NearTan 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出