语音也能做持续集成和持续部署?看 Jenkins + Alexa 如何实现
作者:互联网
作者:Kesha Williams 翻译:Peter 校对:卢迪
集成 Alexa 到 Jenkins 流水线并通过语音跟踪流程的配置远比想象中的简单。
快来看这篇亚马逊 Alexa Champion 成员 Kesha Williams 完成的使用 Alexa 部署代码到云服务的 demo 教程吧。
为何要通过语音操作部署
语音操作革新了我们沟通的方式,因为这是简单的,直接的,高效的。对我来说,通过语音操作 Jenkins 而完全不需要碰触键盘并获得结果是十分便利的。这种情况下,语音是数据操作的另一个切入点并将是后续我们深化自动化操作构建,测试,发布 Java 工程的效率提高保证。
持续集成持续部署
如果你熟悉 DevOps 就会明白持续集成和持续部署对于整个软件产品的发布多么重要。CI/CD 就是持续构建,测试和部署的最佳工程实践。DevOps和CI/CD能够提高软件工程师团队的产品发布效率和工作信心。并直接提高最终产品用户的满意度。
DevOps Pal 综述
DevOps Pal 是一套私有的 Alexa 解决方案,其目的在于构建 Jenkins 工作流。Alexa for bussiness 是在于我看来最贴切的方案,完成基于组织架构的设计并掌握完全的访问权限控制。从 DevOps Pal 一开始执行,就会实时显示执行过程中的工作流详情。
DevOps Pal架构
我使用了一些组件和工具来实现 DevOps Pal。我们先看一下它的具体实现:
整个流程的起始点就是对 Echo 设备说出“Alexa,打开 DevOps Pal 开始部署我的代码”。
Echo 设备监听着激活关键词(如 Alexa,Echo,Computer 或是 Amazon),背后的实现原理是通过深度学习机制来识别用户选择的激活关键词。
一旦捕获到我发出的激活指令,语音就会被录制下来并发送到 Alexa语音服务(AVS),它采用自然语言识别算法(NLU)将语音转换为文字并识别其背后的意图。
于是我的指令就发布到了DevOps Pal;习得技能开始触发 Jenkins 任务执行,并将相应结果通过文本转语音合成机制(TTS)反馈给我,这个过程是通过自然语言播报的。
咱们再分组件具体看一下实现原理:
-
Alexa 语音服务(AVS) - 我通常说它就是云端的 Alexa 大脑。AVS 是由一系列语音控制人工智能助理相关的服务组合而成。AVS 能够智能的接入任何包含语音控制耳机和麦克风的第三方设备,并不是仅仅局限于使用 Echo 设备。
-
Alexa 技能树(ASK)- 这是开发者扩充 Alexa 技能的 SDK(软件开发包),以便开发自定义的新功能。
-
Alexa 开发入口 - 开发 Alexa 技能点需要通过语音用户接口(VUI),它将会识别语音输入并通过后台的云端服务解析语音背后的意图并告知Alexa如何响应。这些VUI以及后台的云端服务的相关配置都是通过 Alexa 开发入口实现的。
-
AWS Lambda - 运行在云端的一些代码。开发者无需关注服务器的配置和管理。通过 Lambda 创建的应用是服务无关的,它可以自动配置需要的服务器。Lambda 支持多种语言实现,比如 Python,Java,NodeJS,Go,C# 等等。
-
GitHub - Java 代码配置管理工具
-
EC2 上执行 Jenkins - 我用的 Jenkins 来部署,测试和部署 java 应用接口。EC2是安装 Jenkins 的虚拟服务器,Jenkins 还需要和其他一些工具一起使用:
-
Maven - 用于自动构建 Java 工程的工具
-
Junit - 用于Java单元测试的一个框架
-
AWS 命令行界面(CLI)- 开发者可以使用命令行访问他们的 AWS 帐号服务。
-
Blue Ocean - 这是用于创建和监控 Jenkins 工作流的一个 Jenkins 插件。
-
AWS Elastic Beanstalk - 这是帮助开发者在亚马逊云端部署和管理相关的Web应用的编排服务。
- Postman - 这是个用于测试 API 和 Web Service 的 HTTP 客户端
语音交互模型
语音用户接口(VUI)描述的是沟通工作流的总体情况,是通过Alexa开发控制台实现的
值得强调的VUI组件是激活名称(用户如何加载相关的技能点)以及背后意图(用户如何组织调度技能点的语句)
举个例子,“部署代码的意图”就是当用户说出一些特定的语句来实现的(比如,执行Jenkins工作流,执行Jenkins任务,部署指定代码,部署代码,或是部署)或是一些类似的语句像是,“部署我的代码”
流程的终结点就是推送的技能点的执行边界。本例中,就是通过Python写的Lambda服务。它的业务流程就是通过调用Jenkins的远端服务接口来远程调度任务。
调用任务的URL就是 jenkins_url/ job/job_name/build. API调用时通过基本的鉴权模式并添加 Jenkins 相关信息到 HTTP 请求头来避免跨站请求伪造 CSRF(Cross-site request forgery)***。
当然了,在 Jenkins 2.96 版本以后,可以通过 API token 来验证 API 相应的安全性,而无需再通过 Jenkins 信息和相关密码了。
Jenkins任务
这个’alexa-cicd’任务,就是 DevOps Pal 触发的。通过这个 Jenkins 操作界面,我们能完成相关的操作,但我还是更喜欢使用蓝海 Blue Ocean 的操作界面,它的用户体验更好,更能提高操作的直观性。启动 Blue Ocean 也十分简单,就是安装一个插件,至于到底使用哪个 UI 取决于你自己了。
当Alexa启动了 ’alexa-cicd’ 任务之后,我转到工作流界面。在这里我能看到任务执行的实时信息。每个任务都有四个工作阶段,启动,构建,测试和部署。
在部署的这个最终阶段,我通过命令行(CLI)执行复制生成的 artifact 到 S3 服务器,然后再创建一个基于此版本的 Elastic Beanstalk 应用。
即将引入的新功能
通过语音自动完成部署仅仅是个开始。下面的几个功能都是很快能实现的:
-
DevOps Pal 将能够展示相关工作流的执行任务名称。这将大大提高 DevOps 团队的效率。
-
Alexa 通知服务可以集成 DevOps Pal,以便任务执行完成后或是失败后,直接发送相关信息到 Echo 设备。如果任务失败,将会有更详细的失败出现在哪里以及失败原因的信息。这对于长期执行的任务以及获取及时的任务执行情况大有裨益。
-
DevOps Pal 还能进一步升级,以便能查询任务实时的执行情况。
原文链接:https://jenkins.io/blog/2019/02/26/jenkins-alexa-voice-controlled-cicd/
标签:Alexa,部署,持续,DevOps,语音,Jenkins,Pal 来源: https://blog.51cto.com/15127503/2657524