什么是DevOps工程师? Clearly, 这个问题没有一个放之四海而皆通的答案:浏览几家公司的DevOps工程师职位空缺就足以说明这个角色的需求是多么多样化.
DevOps专家应该能够将他们的技能融入到公司IT流程的独特机制中. 候选人通常需要精通部署自动化和网络, 了解软件授权, 在硬件和软件方面要明智, 使用多种操作系统, 用各种语言编写脚本来构建报告和自动执行任务. 他们必须不断地与队友沟通,以便确定任务的优先级,并擅长于记录和演示他们创建的工具.
在一个人身上评估这么多领域的技术知识和沟通技巧是很棘手的. 这就是本指南的意义所在:我们将告诉您,为了成功聘请DevOps专家,您需要知道什么, 给你一些DevOps面试问题的例子, 并强调应聘者应该展示的技能.
让我们从现在每个DevOps专家都应该熟悉的一个基本概念开始.
虚拟化和沙箱
对所有DevOps候选人来说,理解虚拟化是必不可少的. DevOps行业中的许多当代思想和策略都是建立在它的基础之上的, 并且在许多公司中发挥作用,无论其结构或目的如何.
虚拟化背后的思想是抽象底层硬件或软件,使事物更少依赖,更孤立. 它实际上是一个广泛的概念,适用于服务器, 网络, storage, 台式电脑, 甚至是应用程序.
例如, 安装了所有服务和工具的服务器操作系统(OS)可以像在公司的真实计算机上一样配置, 裸机服务器, 而是放在虚拟机中, or VM. 然后,vm可以在开发人员笔记本电脑上启动,以模仿服务器环境中服务和工具之间相同的真实结构和关系, 即使开发人员使用不同的笔记本电脑进行工作. 如今,有了像Vagrant这样的虚拟化工具和轻量级容器管理系统,这变得特别容易 Docker .
另一个例子是如何将具有多个资源的复杂网络隐藏在几个虚拟层后面, 然后划分为可管理的部分.
存储虚拟化也是如此:多个物理存储设备实际上“连接”在一起,看起来像单个存储单元, 然后它们可以根据公司的需要进一步划分.
Finally, 应用程序虚拟化将允许相同的应用程序封装在多个操作系统上运行.
一定要问应聘者,他们是如何在自己完成的实施中看到这些好处的.
应聘者能够解释使用虚拟化的主要好处是很重要的:
更好地控制IT资源
更快地设置和配置IT基础设施
简单的沙盒
便宜的实验
更快的释放和恢复时间
更好的隔离,从而更高的安全性
降低变化带来的风险
更好的软件和服务的可测试性
虽然可能不需要候选人列出所有的点, 理解为什么要使用虚拟化以及在哪里可以实现虚拟化是非常重要的. 没有它, DevOps工程师的可能性非常有限,无法提出有效的解决方案.
除了 why , the how 组件可以让你了解他们是否是一个真正有技能的人——通过询问候选人他们是如何在他们自己完成的实现中看到这些好处的,确保其中的一些要点是可以证明的.
虚拟化带来了廉价和高效 沙盒 . 沙盒的意思是把一个软件, 就像一个运行的程序, 在一个孤立的盒子里, 并控制它可以访问什么资源以及何时访问.
沙箱对安全性和测试都非常有用. 说到安全, 这个过程可以阻止软件漏洞或系统故障的传播. 在测试中,在将软件发布到运行服务器之前对其进行测试是一种很好的方法. 在沙盒中, 您可以模拟各种极端情况并测试各种用户输入, 查看程序在被多个并发请求过载时的执行情况, 自动化质量保证测试, 等等......。.
在一天结束的时候, 虚拟化和沙箱使您能够更快地进行开发, 更频繁、更无缝地推出新功能, 并适应不断变化的公司进程. 最终,他们通过减少许多不可避免的风险来节省资金, 通过自动化大量的日常流程.
有用的术语包括虚拟机, 主机和客户操作系统, 容器, 和管理程序. 候选人应该能够解释这些.
面试问题示例:
有哪些工具可以实现虚拟化? 今天市场上的主要参与者是什么?
如果不使用虚拟化,什么是不可能的? 后果是什么??
VMWare和Docker有什么区别?
您如何标准化开发人员的环境,以便他们使用软件就像在您的实时服务器上一样?
如何才能更频繁地发布,并且能够在几分钟内而不是几小时内回滚?
版本控制系统(vcse)如何.g. Git)与虚拟化一起工作?
上面列出的最后一个问题尤为重要. 这里的想法是VM配置应该与项目代码一起在VCS中跟踪. 通过这种方式,可以为当时提交的任何给定代码状态重现虚拟机的正确配置. 跟踪应用程序代码及其运行系统的配置,可以重现与VM配置和操作系统版本相关的错误, 包, 和库.
现在我们已经检查了一些基本的东西, 让我们看看DevOps专家应该如何理解当今的硬件, 包括云计算.
云技术和硬件
在许多情况下,为了经营IT业务而拥有硬件的日子已经一去不复返了. Nowadays, 亚马逊(Amazon)和谷歌(Google)等公司维护硬件并将其出租, 按月付款,这只是原始硬件成本的一小部分.
租用硬件而不是购买硬件是当今许多企业普遍采用的一种方式. 通过将硬件设置和维护任务外包给专门的团队,它消除了大量的硬件设置和维护任务. 这也加快了创业的速度, 或者构建一个概念验证产品, 或者为客户提供即时专用的试用设置. 它还允许您直接关注业务逻辑,而不是花费时间设置自己的硬件.
公司甚至可以建立自己的系统, 内部云, 通过将他们的硬件连接到一个网络中,并在其上进行抽象. 混合主机托管-云解决方案也很流行 . 无论如何,云计算将出现在DevOps专家的日常工作中. 这就是为什么评估他们的相关知识和技能将帮助你确保你的公司不会错过速度, 灵活性, 以及云计算提供的规模.
首先,向应聘者询问云计算带来的好处,比如:
降低安装和维护成本
能够支付你只使用,并添加更多的资源,因为你去
由供应商自动更新软件
强大的灾难恢复
尽管这个问题可能不那么实际,而更有哲理, 当人们对技术及其目标有一个大致的了解时,这总是好的. 如果是这样的话, 他们可以在需要的时候学得更快, and, 有更广泛的理解, 现有技术在您的业务中是否会有更智能的应用.
在将云计算引入公司的it基础设施方面,情况有所不同 服务模型 由供应商提出. 您的DevOps候选人是否对标准模型之间的差异说了几句话, 并给出例子:
基础设施即服务(IaaS)
平台即服务(PaaS)
软件即服务(SaaS)
同样值得询问的是他们使用这些模型的经验.
接下来,在这些模型的上下文中讨论您的业务流程. 例如, 如果你的公司频繁发送电子邮件, 它可以使用像Amazon Simple Email Service这样的SaaS解决方案吗, 还是应该使用第三方IaaS建立自己的托管服务? 会有什么不同呢? 两者的局限性是什么? 从一种模式过渡到另一种模式有多容易? 会有锁定吗?
另一个例子是实施内部项目管理或公共用户支持系统. 这两种情况, 市场上有许多可用的解决方案——你很少想从头开始构建自己的解决方案. 其中一些由提供商托管和维护, DevOps将参与将其与团队使用的其他软件集成. 其他的可以下载, 安装, 配置, 定期更新, 这也取决于DevOps团队的能力.
因此,你应该期望应聘者能毫不费力地回答以下问题:
什么是云服务API,存在哪些定价模型,以及什么是API使用配额?
IaaS、PaaS、SaaS哪一个适用于我们公司? (这意味着候选人在提交申请之前已经了解了你的公司及其目标.)
租用硬件而不是拥有硬件的风险是什么?
使用自己的硬件有什么风险,什么时候它是唯一可用的选择? (提示:不可靠的互联网服务就是一个典型的例子.)
在这种情况下,购买自己的硬件会给公司带来好处?
哪些遵从性问题与使用云服务有关, 以及如何检查给定的服务是否符合公司策略, 标准, 以及现有的认证?
因为随着时间的推移,DevOps可能会改变公司的基础设施,所以让他们了解这一点非常重要 标准遵从性和认证 . 如果你的产品或服务在公司的居住国受到监管, DevOps需要与您的信息安全工程师合作,维护现有的合规性或申请新的合规性. 如果是这样的话, 让应聘者谈谈他们在这个领域的经验:他们是如何完成合规的,以及他们在这个过程中扮演了什么角色.
下面是一个快速实践任务的想法,它将帮助您评估DevOps候选人在遵从性和认证方面的知识. 如果你以前申请过,你将需要填写很多申请表. 从其中一个问题中摘录一段,去掉所有的答案,然后交给候选人. 让他们:
解释问题的意思,然后
告诉你他们会问基础设施什么问题, 安全, 以及开发部门为了获得所需的信息,在表格中填写问题.
即使你有一个专门的合规专家, DevOps很可能会大量参与法规遵从性应用和验证. 如果DevOps候选人缺乏对这些方面的理解,那么您将面临合规状态的风险.
回到 硬件 话题,了解它是有回报的. 释放软件全部潜力的方法之一是使用正确的硬件,并以正确的方式将其组合起来. 例如,看看Stack Overflow 在2013年提供了1.5亿个HTTP请求 and 2016年2.1亿 . 在硬件列表中, 你会注意到2013年使用了四个Microsoft SQL server, 到2016年仍然只有4家. 数据库服务器的数量没有增加,只有两台服务器进行了升级. 这意味着在幕后有一个聪明的计划. 它不仅可以直接节省硬件成本, 还有硬件安装, 主机托管, 和维护.
So, 这取决于您公司的业务流程, 你可能想问DevOps候选人以下几个问题:
哪些类型的软件需要更多以下内容?
处理能力(CPU速度)
cpu或核心(用于并行化)
GPUs
计算机内存
给出一个硬件设置中冗余的例子. (您可以使用Stack Overflow文章作为指南来熟悉一个可能的用例.)
什么是负载平衡,什么时候需要负载平衡?
您的公司可能没有硬件,并将云服务用于整个IT基础设施, 但要做出最好的选择, 重要的是,DevOps开发人员可以测量硬件性能,并了解如何调整软件以使其与给定的硬件最佳配合. 如果您没有聘请专门的服务器管理员,那么这项技能尤为重要.
Next, 我们将看到你在每个DevOps工作中都会看到的东西:在测试和部署软件时消除常规的重复性手工工作.
构建、测试和部署自动化
在过去的十年中,由于新的开发人员工具的创建和许多过程自动化的引入,软件开发过程发生了很大的变化——尤其是在构建过程中, testing, 和部署. 这通常被称为“持续交付”(CD)。, 但在你开始面试DevOps专家之前,了解DevOps和CD之间的关系是值得的.
With CD, 团队倾向于更频繁地发布新功能, 把大任务分成小任务,分阶段完成, 通过向有限数量的客户推广新想法来测试新想法, 并且在新版本中发现问题时可以轻松回滚. 在DevOps开发人员的帮助下,所有这些都成为可能,并使企业更加灵活,更快地适应不断变化的市场,压力更小.
DevOps工程师在设置、调整和维护CD方面发挥着关键作用. 下面是它的工作原理.
Step 1. DevOps团队咨询其他团队,以收集有关如何开发的信息, testing, 部署流程已经设置好了.
Step 2. DevOps团队学习计划的特性, 评估公司的成长速度, 估算当前基础设施费用的范围, 找出公司中最耗时的任务——所有这些都是影响哪些任务应该自动化和改进的因素, 按照什么顺序. 尽管本节主要关注自动化测试和部署, 这两者通常是所有其他过程的组成部分,并影响它们. 所以更多的技术栈研究, 可以对测试和部署自动化做出更好的决策.
Step 3. DevOps工程师以这样一种方式规划和优先处理自动化实现任务,即首先处理最关键和/或最昂贵的流程. 在这个阶段, 通常会与其他团队的领导进行大量讨论,以便为每个人充分利用测试/部署自动化.
Step 4. 自动化是分阶段实现的.
对于已经有持续交付的公司, 可能只是一个待办事项列表,等待新的DevOps员工接手. 然而,通过上述步骤仍然是有益的——当DevOps工程师了解了整体设置并可以在执行计划的任务时提出自动化改进建议时,这不会有什么坏处.
当涉及到自动化构建、测试和部署时,许多工具和概念都在起作用. 在我们探讨以下类别时,有必要考虑一下哪些是与候选人最相关的.
单元测试
单元测试是一种专门开发的脚本,用于测试应用程序的最小可测试部分(单元)以确保其正常运行.
通常情况下,单元测试是自动化的. DevOps团队的工作是将单元测试运行器集成到开发中使用的虚拟机以及CI服务器中,以便测试可以被使用 钩入自动运行 对于每个新版本发布之前,或由开发人员或测试人员手动触发. 还应该配置报告,以便开发人员能够立即发现他们的新代码是否破坏了现有的功能.
此外, 对于需要定期运行大量单元测试的大型应用程序, DevOps开发人员通常会设置专用的持续集成服务器,在服务器上并行运行单元测试,而开发人员则在开发环境中继续编写代码. 没有这样的CI服务器, 当在单个开发人员笔记本电脑上运行时, 单元测试自动化有时需要几个小时, 如果不是更长.
有各种类型的测试:
功能测试:是否所有关键的应用功能工作?
兼容性测试:应用程序在各种环境中是否保持其功能? 例如, web应用程序应该在所有支持的浏览器中运行, 支持多个数据库的应用程序应该始终与所有数据库一起工作, 驱动程序应该在所有支持的硬件型号上正常工作, 等等......。.
性能测试:流量或其他类型的负载如何影响应用程序的性能?
安全测试:攻击能否暴露应用安全机制的缺陷, 这样受保护的数据就可以在未经授权的情况下被访问?
可用性测试:应用程序的用户能否在不阅读文档的情况下直观地理解如何使用它? 它像预期的那样工作吗?
上面的一些测试可以进一步加入到“冒烟测试”(也称为验收测试或完整性测试)中,即在发布之前执行的测试,以显示应用程序是否符合特定标准.
在发布新版本之前, 源代码必须被构建或至少打包, 取决于你的技术栈. 对于c#或Java等静态类型编程语言, 构建意味着将源代码编译成 可执行的 它可以由计算机运行. 对于像PHP、Python和JavaScript这样的解释性语言,可能不需要编译 per se , but e.g. JavaScript文件被加入到组中并被缩小, SASS文件被编译成CSS文件, 带有翻译的语言文件也会被构建, 图像被缩小了.
DevOps开发人员通常会使用构建自动化软件和 这些软件的列表 is huge. 对DevOps候选人来说,一个好的问题是让他们谈谈他们使用了哪些工具来解决哪些任务. 这些工具可以分为两类:
特定于编程语言的工具. 例如,Rake是一种基于ruby的构建工具,而Apache Ant则流行于Java.
特定于操作系统的工具:FinalBuilder是针对Windows软件开发人员的,基于make的工具(如 GNU make and mk )适用于Linux/Unix和Mac OS.
重要的是,将在您的团队中工作的DevOps工程师熟悉特定于项目中使用的操作系统和编程语言的构建工具.
持续集成、交付和部署
人们经常混淆这三个术语,所以让我们先快速浏览一下:
持续集成 帮助保持主线(项目代码的基本分支在Git这样的版本控制系统中被跟踪)是最新的. 这是通过将所有开发人员的工作副本合并到主线中来实现的.e. 每周几次(或更多次)vs每次发布一次.
持续交付 确保经常生成应用程序的可部署工作状态.e. 通过小的增量. 这样,您就有信心在业务准备就绪时将应用程序部署到生产环境中.
持续部署 是将应用投入生产的过程吗. 集成和交付的连续性是部署阶段的先决条件.
由于自动化,这三个实践现在都是可能的 由DevOps工程师实现 . 这三种方法都需要脚本技能和对相应工具的熟悉. 这就是为什么你应该在面试中提到这个话题.
在你和候选人讨论之前, 从开发者那里了解这一点很重要, 系统管理员, 和其他技术团队了解你们公司的主题状态. 如果任何一个积分, delivery, 或者部署方案已经就位, 记下工作中的工具和脚本语言,与你的候选人讨论. 如果没有实现, 询问应聘者是否在项目中使用过与你相同的语言和框架栈.
应聘者是否精通你列出的每一项技术并不重要. 这是因为针对不同的情况有许多不同的工具, 最主要的一点是理解他们的目的, 以及能够学习它们并开始快速使用它们. 具有足够经验的顾问通常能够在几天内学习新工具.
监控
因为有那么多的服务器、服务、微服务、数据库等等. 形成应用程序的构建块, 不持续而严格地监视它们的可操作性和可用性是有风险的.
当然,DevOps工程师必须能够自己设置监控. 但同样重要的是,他们可以:
分析失败,了解失败的原因
修复故障并恢复功能
采取措施防止将来发生此类故障
在内部报告中概述所有细节,并通过注释改进内部文件, tips, 以及与特定问题相关的程序
建议产品团队改进导致问题的代码
帮助支持团队在博客文章和支持单中用简单的语言解释问题
请DevOps候选人谈谈他们是如何设置监控并处理一些故障的. 从他们的故事中, 你将能够确定他们是否熟悉上面概述的要点.
你还应该问应聘者以下问题:
他们用了什么软件来监控啊
他们是否使用第三方服务(如Pingdom)或开源解决方案(如Zabbix和Nagios), and
他们如何将服务/解决方案连接到应用程序(例如.g. 通过API,嵌入JavaScript代码,安装和配置补充服务器包等.)
Finally, 当涉及到性能和故障分析时, 能够配置日志记录和读取日志输出是有效处理故障的关键.
在面试DevOps候选人之前,您需要熟悉以下与监控相关的术语:
服务器正常运行时间监控 . 这意味着测试公司网站、应用程序、服务器和服务的可用性.
正常运行时间测试地点 . 从不同的位置监控网站的可用性是有意义的, 尤其是那些网站用户最多的地方.
状态页面 . 这些显示当前和历史数据的网站或服务的正常运行时间. 可能有公共和私有状态页——后者通常面向产品团队, 服务器管理员团队, 还有其他工程师, 并包括用于管理整个基础设施的全面监控细节和统计数据. 建立这样的页面通常是DevOps专家的责任.
页面速度 . 对于网页内容,加载缓慢的页面意味着 低谷歌排名 and 转换和销售损失 .
报警 . I.e. 当事件发生时,通过各种渠道通知责任方. 深思熟虑的提醒会减少你解决问题的时间.
日志轮转 . 这仅仅意味着按时间表归档日期已过的日志文件.
日志服务器 . 这是一台专用服务器,用于收集和存储所有日志. 拥有一个简化了搜索日志数据的过程, 并允许您对其进行过滤以快速审核系统.
关于页面速度优化的一个好问题是:DevOps专家可以采取什么措施来优化页面速度? 的确,许多改进是由开发人员在代码内部完成的,但也有一些DevOps工程师可以做的:
在web服务器级别启用压缩
通过微调web服务器(如Apache和Nginx)和负载平衡器来改善服务器响应时间
启用内容交付网络(CDN)的使用
我们上面讨论的通常叫做 性能和可用性监控 . 但监控还有另一个方面: 安全监视 . 其理念是必须跟踪用户和程序的所有操作和活动.
不管你的客户是大是小, 贵公司对您存储在服务器上的个人数据的保密性和安全性负责. 这同样适用于:
智力资产,比如应用程序的源代码. 您希望安全地存储它,而不泄漏给竞争对手.
公司邮件和其他沟通渠道,包括用户支持. 你不希望公司里的每个人都能访问这些文件.
内部文件,如竞争对手分析、发展战略、财务报告等. 限制和控制对它们的访问具有重要的战略意义.
因此, 观察和记录公司各级基础设施的所有操作和活动是至关重要的, 从网络到应用程序再到员工.
(我们将在文章中详细介绍安全性 资讯科技保安最佳实务部分 below.)
脚本和编程技能
您不希望DevOps工程师在拥有5亿条记录的数据库上运行设计不良的SQL查询并使其冻结.
只有使用编程才能解决上面讨论的任务. In fact, 你应该期望DevOps候选人具备多种编程语言的编码技能.
让我们详细说明一下:首先,编写脚本 bash
(一种Unix/Linux shell和一种命令语言)广泛用于自动化服务器软件设置和配置, backups, builds, 和部署; running monitoring; building reports; and consuming cloud APIs. 事实上,任何一种 自动化 将需要脚本.
为另一个, 将各种系统服务与应用程序顺利集成, 您聘请的DevOps工程师有时需要了解应用程序中使用的编程语言.
一个很好的例子是多租户PHP、Ruby或 Python web应用解决方案 运行在亚马逊网络服务(AWS)提供的云虚拟服务器上. 以下是一些典型的任务,需要DevOps专家运用他或她的编码技能:
创建一个bash脚本在AWS上实例化一个新的VPS服务器. 脚本需要这样做 使用AWS API 在公司账户下创建一个新的虚拟服务器, 将应用程序部署到它, 创建数据库模式并在数据库中配置应用程序帐户. 连接到CRM(如SalesForce)并使用服务器ID更新用户记录也可能是必需的.
在应用程序中编写一个内部方法,将应用程序状态报告给外部监视脚本.
实现一个内部网页,报告所有服务器的状态, 并显示一些使用统计数据.
修改现有的生产Dockerfile(如果使用Docker 集装箱化 ).
创建一个bash脚本,用于执行计划备份,以及根据请求从备份中恢复.
创建一个bash脚本,将新应用程序版本推出到一些(或所有)服务器, 以及在新版本中发现严重错误时回滚它.
实际上,在DevOps的日常工作中有更多这样的任务. 这就是为什么开发人员和devops之间没有明确的界限——他们都能够编写代码. 前者只是更擅长于给定领域的算法和业务逻辑编程, 而后者在系统管理方面有更广泛的知识. 但许多任务都可以用这两种方法来完成.
因此,在DevOps面试中包含编程问题和问题并不是一个坏主意. 至少, 您应该询问应聘者他们使用过哪些编程/脚本语言(除了bash).
另一个选择是使用在线编码测试. 针对不同的编程语言和领域,有许多服务具有预定义的测试(复杂度不同). 有些服务还允许您构建自己的测试, 这样就有可能选择具有贵公司特定编码技能的候选人. 无论您是依赖预构建的测试还是编写自己的测试, 您将需要咨询您的产品/开发团队,以使测试问题相关.
有时, DevOps开发人员被要求从只有他们被授予访问权限的数据库中提取或检查数据. 对于这些情况,能够编写SQL查询将会产生影响. So, 如果您的项目使用数据库, 您可能还想讨论候选人使用您的特定数据库引擎的经验. 您不希望DevOps工程师在拥有5亿条记录的数据库上运行设计不良的SQL查询并使其冻结.
配置SQL表分区是一个复杂的领域.f. the 关于PostgreSQL表分区的文档 . 如果你的DevOps员工需要进入这个领域,知道SQL语法是不够的. 他们需要对索引和影响数据库性能的因素有深刻的理解, 你还需要了解他们之前的工作经验.
版本控制和分支策略
现在很难找到一个不是由Git管理的It项目, 颠覆, 水银, 或者另一个版本控制软件(VCS). 从文档到配置到代码到数据库模式,以及对任何类型的文档所做的修订,这些东西通常都存储在VCS中并使用VCS进行跟踪.
因此,了解如何使用VCS系统对任何候选人都是必不可少的.
根据 2018年堆栈溢出开发者调查 到目前为止,最受开发人员欢迎的vcse是Git (87.2%)和颠覆 (16%).1%). 通常,应聘者至少对其中一项有经验就足够了. Git已经成为IT行业事实上的标准, 在一些公认的项目中仍然使用SVN, wordpress就是其中之一, 例如, 截至2018年.
所有VCS系统背后的思想都是一样的——允许对变更和分支进行管理.
变更管理, 或者修订管理, 允许您跟踪给定文档或代码文件的每一个更改, 以后可以随意恢复. 在VCS中跟踪的每个更改都可以恢复当时跟踪的原始源代码.e. 它可以作为整个项目、文档、数据库模式等的快照. 这样的快照通常称为快照 commit 在VCS术语中.
分支是一种允许多人同时在同一源上进行有效协作的技术——它减少了修订之间的冲突数量,并自动合并由多人(或由同时处理多个特性的同一个人)完成的工作.)
因为分支有不同的方法(也称为分支策略),比如 Git流 and GitHub流 , 要求应聘者知道不止一种是没有多大意义的:如果他们知道其中一种是如何工作的, 他们很容易学会其他的人.
现在,让我们看看为什么能够使用VCS对DevOps工程师来说很重要. 事实上,他们做的很多事情都需要VCS技能:
部署应用程序的特定版本,或恢复到其旧版本之一
将包含特定特性的特定分支部署到持续集成服务器, 这样就可以运行测试并生成报告
比较软件的两个版本,以确定可能影响合规性的任何更改(当您想为DevOps聘请的人也将扮演安全工程师的角色时)
跟踪VCS内部脚本和相应的文档
Git是一个复杂的工具,提供了许多可能性. 当然, 它提供基本的修订跟踪, 但它也有帮助解决复杂任务的高级功能. 例如, git平分
命令允许您有效地查明哪个提交引入了错误. 比如编程语言, 人们可以通过解决各种任务和阅读文档和教程来提高自己的Git技能. 因此,你不应该期望DevOps候选人在VCS方面有全面的专业知识. 只要问候选人两件事就足够了:
他们过去是否使用过vcs,比如Git、Svn或水银
看看他们是否熟悉分支策略
尽管很容易想出一些简短的任务来让DevOps候选人展示他们使用VCS的技能, 如果您打算让他们做一个试验项目,可能没有必要这样做——只需将需求集成在那里,而不是单独进行测试.
帮助您评估试用项目VCS存储库中提交和分支的质量, 你应该询问那些使用你公司VCS最多的人——你的开发人员(产品团队)。. 尽管如此,在检查存储库时,还是有一些事情需要注意:
提交消息(i).e. 伴随提交(快照)的消息应该是描述性和简洁的,并遵循相同的风格
每一个特征, fix, 或者文档中的更改应该单独提交(“经常提交”原则)。
不应该有只完成了一半工作的提交(或者应该在提交消息中标识)。
不应该跟踪“日志”文件或其他与项目无关的文件
使用VCS的最佳实践已经开发了很长时间,并在以下文章中进行了描述 this -如果你是审查试验项目的人,至少浏览一下这样的资源.
DevOps的IT安全最佳实践
DevOps驱动了公司开发过程的许多方面. 因此,它自然是通知安全实践的更广泛实现和培养所有团队安全意识的完美场所. 考虑到这一点, 很明显,为什么安全性是您希望您的DevOps候选人擅长的另一个领域, 特别是如果你没有一个专门的安全团队的支持.
随着IT解决方案被越来越多的行业所采用, 渗透可能性的数量也在增长:从硬件到软件到固件到驱动程序再到业务解决方案, 每一个都是一个单独的项目,需要保护和安全监控. 因此,对安全专家的需求正以前所未有的速度增长. 这就是为什么精通安全的DevOps开发人员是非常有价值的资产.
第一个建议是将与IT安全相关的需求放在前面, 就在你的招聘广告上. 如果您准备接受在解决实际问题时没有实现安全最佳实践的具体经验的候选人, 它仍然是有意义的,提到它是需要学习的主题, 并/或将其列入个人年度教育计划.
Next, 面试候选人时, 在面试接近尾声的时候,在他们熟悉了贵公司使用的技术栈之后, 要求候选人列出一些他们将采取的措施来改进您的整体安全实现. 下面是一些你可能会想到的好例子:
每周发送安全意识信函 -因为所有员工都是容易受到各种攻击的人, 随着新的漏洞被定期发现, 每周写一封总结调查结果并给出建议的信,可能会让该公司不那么容易受到此类攻击.
启动专用安全通道 -在Slack中设置一个专用流程, Flowdock, 或者任何其他公司聊天都是发布及时公告和讨论它们的好方法.
制定安全教育计划 —it never hurts to study 安全 formally; this might be just short online courses taken twice per year. 参加课程对团队建设也有很好的副作用.
构建公司使用的工具、软件和云服务的列表 并密切关注它们的新漏洞.
使用VPN,强制密码轮换 隐藏内部资源是一种常见的做法, 像项目管理软件和源代码托管, VPN背后.
设置安全监控 -如上面的监控部分所述.
此外,对于一些简洁的面试前阅读, 开发运维安全最佳实践 讨论安全方面的挑战和最佳实践.
Finally, 如果你计划在面试过程中做一个试验项目, 确保在项目描述中说明将在可交付成果中评估安全性最佳实践, 如果这适用于项目. (很有可能是这样,不管你想出什么项目.)然后让你的安全/产品团队审查项目并发表意见.
沟通技巧
就像任何需要合作的工作一样, 沟通技巧是团队整体快速进步的关键之一. DevOps专家也不例外.
DevOps专业人员在日常工作中运用沟通技巧的领域有很多:
收集来自不同团队(产品、客户成功、销售等)的需求.)
记录和演示他们创建的工具和解决方案
集思广益,寻找软件和硬件基础架构的解决方案
向利益相关者汇报
人力资源部门可以帮你过滤掉那些明显有沟通障碍的候选人. 因为沟通问题而离开公司的高素质和经验丰富的专业人士并不罕见. 因此,在签订合同之前,及早发现这些问题非常重要.
至少, 在面试和评估试验项目时, 确保DevOps候选人:
能清楚地表达自己的想法和观点,无论是口头还是书面
分享团队快速行动和个人快速行动的价值
了解分享的文化
是否愿意为共同目标而努力
合作是一种非常重要的个人特质. 虽然无法测试 per se ,这会影响应聘者融入团队的速度. Thus, 如果少数候选人具有大致相同的技术专长和技能水平, 优先选择沟通和协作能力较强的.
以下是一些面试中可以讨论的话题:
你以前远程工作过吗(或者在一个开放的空间,这取决于你公司的环境)?
描述一下作为DevOps工程师,你是如何展示你开发的工具和/或流程的.
你使用什么工具与你的队友进行协作和沟通?
筛选DevOps开发人员是一回事. 如何使候选人的要求适应你的公司,它的类型,它的结构?
找到最适合你公司的人
雇佣一个愿意这样做的DevOps经理之间存在概念上的区别 领导公司的重大变革 招募一名工程师 加入开发运营公司的现有团队 .
要在一家公司从零开始建立DevOps实践,你需要一个具备以下条件的候选人:
曾担任首席开发运维工程师,或
作为现有DevOps团队的一员,在一家中型或大型公司从事DevOps工作了几年
这里的想法是,在不需要的公司中建立DevOps基础设施, 除了理论, 有很多技能和经验知识. 一旦基础设施建立并被项目中的其他团队所依赖, 彻底改变它的代价太大了. 这意味着在DevOps中,设计和结构错误的成本非常高. 你可以把它想象成从头开始设计软件,而不是雇人给现有的软件添加更多的功能. DevOps职业也是如此——你不应该冒险把赌注压在一个在该领域经验有限的人身上.
If, 另一方面, 新员工将由现有的DevOps团队进行指导和检查, 对经验的要求可能会放宽, 更注重态度和沟通技巧.
在任何情况下,重要的是候选人能够 插入公司的产品框架 因此,他们必须熟悉公司的部分或全部技术堆栈. 这些包括:
编程语言(如PHP、Ruby、Java或Scala)
应用程序框架(如Laravel for PHP或Play)! Scala)
服务器和其他公司硬件(如Ubuntu)上使用的操作系统(os), Red Hat Linux, 或Windows服务器)
数据库(如PostgreSQL, MariaDB, Oracle,或Microsoft SQL Server)
工具(如备份工具和资产编译工具)
很多时候,DevOps工程师需要使用相应的编程语言为现有框架开发插件. 因为这种情况会经常发生, 他们对公司技术栈的熟悉程度至关重要.
跟踪它的一种简单方法是咨询您的团队并构建您公司使用的技术的详细列表, 然后把它写进招聘广告里. 如果这份名单是保密的, 在面试开始的时候直接给面试者看. 在比较候选人时,这样一个每个候选人都检查过的项目列表将非常方便——有时当比较其他特征没有帮助时,这个列表会使你的选择变得明显.
当涉及到决定 面试策略 ,以下经验法则适用:
把面试分成几个阶段, 然后根据对你的项目至关重要的特征筛选出来,越早越好, 以及排除在沟通方面有麻烦的候选人.
当面试, 一定要让不同部门的人参与进来, 不仅仅是产品团队(软件) 开发人员 ). 让他们提出对他们来说重要的问题,然后收集他们的反馈.
作为最后一个阶段,分配一个试验项目.
试验项目 是求职者炫耀自己的好方法吗. 对一些人来说, 特别是内向的人, 面试意味着很大的压力, 所以你可能无法看到他们的全部潜力,直到他们通过一个试验项目提供了一些惊人的东西.
Finally, 因为DevOps和软件开发有很多共同之处, 我们可以从后者中学到很多东西.
牢记软件开发课程
综上所述,我们想引用Robert L. 玻璃 软件工程的事实与谬误 :
Fact 22. “80%的软件工作是智力工作. 其中相当一部分是创造性的. 其中很少是文书工作.” 合适的DevOps工程师, 就像软件开发人员一样, 会创造出很多有价值的解决方案,成为你公司智力资产的一部分吗.
Fact 23. “导致项目失控的两个最常见原因之一是不稳定的需求.” 这就是为什么DevOps候选人与项目团队持续有效沟通的能力与拥有技术技能同样重要的原因.
Fact 27. “对于软件问题,很少有一个最佳的设计解决方案.” 这里,同样是关于软件问题,DevOps需要一些直觉和经验知识. Again, 当公司的全局任务是建立DevOps基础设施时,聘请一位经验丰富的DevOps工程师是至关重要的.
现在你知道了:制定一个招聘计划. 关注公司的需求. 倾听团队的反馈. 制作技能和素质对照表. 找出弱点并计划持续的自我教育计划,包括跟进. 使用在线招聘管理服务. 最后,在DevOps招聘过程中投资意味着之后的收益:
“选择容易,生活艰难.
“艰难的选择,轻松的生活.”
——杰西·格雷戈雷克