如何使用 Jenkins 的脚本化流水线(Pipeline)

在这篇简单的教程中,你将会学习到 Jenkins 的流水线即代码,以及如何开发流水线脚本的指导。

Jenkins 是一个开源持续集成服务器,它可以提供持续执行自动化构建和测试的能力。Jenkins 可以控制和监控多种任务,包括:拉取代码、静态代码分析、构建工程、执行单元测试、自动化或者性能测试,最后部署应用。这些任务通常是一个持续部署流水线。

流水线(Pipeline)是 Jenkins 的一套插件。流水线可以认为是执行任务的一系列阶段,它可以持续地发布你的应用。“持续”的概念是相对于你的应用环境来说的:在某些情况下,持续发布可以是每天也可以是每周,这取决于你的业务需要。在特定场景中,例如严重 bug 的修复,就需要在环境准备好后尽快地发布程序。流水线提供了自动化这些过程的方法。

在 Jenkins 中,流水线使用 DSL 来定义语句和表达式,和 Groovy 的语法结构相同。这使得流水线对于了解 Groovy 的人来说很简单。

从 Jenkins 的2.0版本开始,流水线功能变得开箱即用,不需要特殊的配置。另外一个改进的地方是,流水线可以被当作代码,使你开发出来的脚本可以利用版本管理工具控制它。

利用流水线脚本,可以把刚开发出来的特定功能代码发布后测试。这是为了不引入新的 bug,保证程序可以像之前一样正确执行。因此,你可以开发流水线脚本来执行指定流程的自动化测试,对特定场景利用 Apache JMeter™ 执行性能测试。

本文,我们会讨论脚本化流水线(流水线即代码)的细节,并解释它的结构,提供一些使用示例。更多有关在 Jenkins 中使用 JMeter 的信息,可以在持续集成入门的博文中找到:如何在 Jenkin 中运行 JMeter。同时,文章还介绍了如何利用 Jenkins2.0 的流水线来运行 JMeter 测试,并在 Github 中提供了例子。

随着流水线的引入,Jenkins 提供了一个嵌入式的 Groovy 引擎,使得 Groovy 成为了流水线的 DSL 脚本语言。

这里是设置 Jenkins 流水线的步骤。

1、首先,登陆到你的 Jenkins 服务器,并从左侧面板选择“New Item”:

2、下一步,输入名称并选择“Pipeline“类型。点击”OK“后进入下一步:

3、你可以开始写流水线脚本了:

你可以在中间红色框里写脚本,这也是下面要解释的。

流水线用特殊的语句或者元素定义章节,这遵循 Groovy 语法。

节点块 首先定义的块是“node:”

“node”是 Jenkins 分布式架构的一部分,它可以把负载分布到多个“agent”节点。“maerer”节点处理所有的环境。Jenkins 代理节点从 master 节点上取得构建任务,然后根据 node 块指定的节点上执行所有任务。更多信息可以在 Jenkins 分布式构建中找到。

这个块不是必须但是建议使用,而且是一个好的实践。如果代码中包含这个的话,Jenkins 会进行调度,当有任何节点是可用状态时运行所有的步骤,并且创建指定的工作目录。

阶段块 下一个需要的是“stage:”

你的流水线中的多个步骤可以组合为阶段。在这些阶段中可能包括:

  • 拉取代码
  • 构建工程
  • 部署应用
  • 执行功能测试
  • 执行性能测试 上面的每个阶段都可以包括多个动作。例如:应用部署的阶段可以包括:为了功能测试而拷贝文件到指定目录,在特定的服务器上执行性能测试;一旦文件包括成功,就执行部署动作。

每个阶段块指定要执行的任务。例如:一个全部脚本化的流水线可能是:

该脚本包含如下阶段:

构建阶段: Selenium 测试阶段: dir(automation_path):改变当前目录为变量 automation_path。 bat “man clean test … “: 触发 maven 来执行套件“冒烟测试”,并使用预定义的变量“QA”。同时,“clean”表示会清理构建。 阶段块也是可选的,但是推荐使用的,因为它是一种组织任务的方式。

Jenkins 提供了把预定义动作生成为流水线语句的接口,这可以添加到任意脚本阶段中。在流水线页面,点击“流水线语法”就会进入下面的页面:

例如:根据如下选择可以创建执行 windows 批处理文件的命令:

点击“生成流水线脚本”就会生成需要的语句,然后就可以添加到脚本中。

流水线即代码的想法,是基于流水线脚本可以被当作代码一样放到代码仓库中,进行版本化控制。包含你流水线代码的文本文件叫做 Jenkinsfile。

把你的流水线写入到 Jenkinsfile 中,并让它作为你的应用代码库的一部分有很多好处:它可以被团队其他成员审查、编辑,该文件可以版本化和程序一起构建。

你的 Jenkinsfile 可以通过 Jenkins 的 web 界面或者你的文本编辑器进行编辑,并且你还可以使用你喜欢的 IDE 编辑,因此可以成为你的工程的一部分。而且,你可以配置 Jenkins 自动轮询你的库,当检测到有更新时触发新的构建。在工程配置页面的“构建触发器”区域可以完成该配置:

启用“Poll SCM”,允许你在计划文本框中输入类似 cron 的表达式。配置 Jenkins 轮询你的代码库不是一个轻量级、高效获取更新的方式。而 Git Hooks 是一个比较好的方式。在文章自定义 Git——Git Hooks 提供了如何配置的内容。

Jenkins 通过提供沙盒来限制执行任意 Groovy 脚本。在流水线选项卡中,选项“使用 Groovy 沙盒”显示在下面,它允许用户在没有管理员权限的情况下运行。这种情况下,脚本只能使用内部可访问的 API(这一点允许你使用 Groovy来开发自己的脚本)。

当取消勾选,如果脚本中的操作需要批准,则管理员就必须授予权限。这也就是“脚本授权”。默认情况下,所有的 Jenkins 流水线都运行在 Groovy 沙盒中。如果勾选该选项,并且用到了未授权的操作,就会在运行时发生错误。白名单和黑名单都可以在脚本安全列表中找到。请参考本文中的脚本授权获取更多信息。

流水线最新改进的地方是申明式流水线,这和我们讨论过的脚本式流水线有些不同。它们都是流水线即代码的实现,但申明式的流水线提供了更容易理解的语法并且容易开发和维护。这两个增强都是增加了语法元素,允许你定义不同的流水线结构。

基本上,脚本式流水线的结构如下:

另一方面,申明式的流水线可以采用更多的元素,如下所示:

脚本元素“pipeline”、“agent”和”steps“都是申明式流水线特有的语法;”stage“对于两种类型都可用;而”node“只能用在脚本式流水线中。

  • ”Pipeline“ 定义的块包含了所有的脚本内容。
  • ”Agent“ 定义了流水线要在哪里运行,这和脚本式流水线中的”node“类似。
  • ”Stages“ 包含所有阶段。 在这篇博客中,我们已经大概过了一次 Jenkins 的流水线即代码。我们还有如何开发流水线脚本的高级内容的教程。而完整的文档则需要查看 Jenkins 官方文档。 在我们的 Continuous Testing Academy 中可以学习到你用于测试的 Jenkins 所有知识。

你也可以把 BlazeMeter 集成到你的 Jenkins 流水线中。尝试把示例应用在BlazeMeter 中做性能测试,或者把你的url放入下面的文本框中,你的测试将会在几分钟内开始运行。

原文发布于微信公众号 - DevOps时代(DevOpsTimes)

原文发表时间:2018-04-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏飞雪无情的博客

工具 | Android Studio 2.3镜像更新,极速下载体验#2

Android Studio 2.3发布了,更新了很多不错的功能,比如WebP的支持,AppLink助手等,,因为众所周知的原因,所以就第一时间更新了镜像,让大...

923
来自专栏轻扬小栈

linux 百度客户端 非图形界面 小结

1955
来自专栏技术/开源

开源API集成测试工具 Hitchhiker v0.3更新 - 自动同步

Hitchhiker 是一款开源的 Restful Api 集成测试工具,支持Schedule, 数据对比,压力测试,可以轻松部署到本地,和你的team成员一起...

2138
来自专栏全华班

工作流学习-用户与组的基础概念

阅读文本大概需要 5 分钟。 前一段时间我们在前面文章中介绍了工作流、也初步认识了Activiti流程框架,我们知道了它是目前市面上比较流行的工作流...

4024
来自专栏xiaoheike

嵌入式(Embedded)Neo4j数据库访问方法

应用中采用嵌入式Neo4j(Embedded Neo4j)数据库,插入数据后不知道如何访问。查询之后知道有Neoclipse这个可视化工具,最新版本是1.9.5...

1652
来自专栏任浩强的运维生涯

Jenkins的初级应用(1)-Publish Over SSH

    作为Jenkins最基本的应用也是重要的一环就是可以把文件传到服务器上面,或者在服务器上面远程执行命令。一个可在在远程分发了文件之后就控制远程服务器的操...

780
来自专栏测试驿栈

Jmeter(一)_环境部署

  Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试CS/BS的软件。它可以用来测试静态和动态资源的性能,可用于模拟大量负载来测试一...

1722
来自专栏全华班

ESB是什么

ESB是一个主要依赖XML消息交换的企业级消息系统,这种消息继而被智能的通过一种非集中式的架构路由和转换。 开源的ESB? Mu...

4176
来自专栏极客生活

python读取hive数据最佳实践

使用pyhive库来连接hive server2提供的对外接口,使用sql语句来对数据进行查询,并处理返回结果。

2332
来自专栏飞雪无情的博客

Window下搭建Android开发环境

SDK Setup启动和设置。下载好Android SDK后,解压放到一个你常用的目录下,然后运行SDK Setup.exe将启动Android SDK and...

783

扫码关注云+社区

领取腾讯云代金券