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

Posted DevOps时代

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用 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”:

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

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

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

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

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

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

流水线用特殊的语句或者元素定义章节,这遵循 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 提供了把预定义动作生成为流水线语句的接口,这可以添加到任意脚本阶段中。在流水线页面,点击“流水线语法”就会进入下面的页面:

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

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

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

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

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

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

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

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

启用“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放入下面的文本框中,你的测试将会在几分钟内开始运行。

更多相关文章阅读






谁说中国的技术大会都是华而不实?

把下面这张图甩他脸上! 


80余名顶级专家,手把手带你起飞!

覆盖 DevOps 全领域的技术,全是干货!

涵盖国内外众多行业,总有一款适合你!

国内首个 DevOps 标准官方指定发布平台!



DevOps 国际峰会(DevOps International Summit,缩写:DOIS)是国内唯一的国际性 DevOps 技术峰会,由 OSCAR 联盟指导、DevOps 时代社区与高效运维社区联合主办,共邀全球80余名顶级专家畅谈 DevOps 体系与方法、过程与实践、工具与技术。


点击阅读原文,参与报名⬇️

以上是关于如何使用 Jenkins 的脚本化流水线(Pipeline)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Jenkins 声明式管道中创建方法?

使用 Jenkins 实现集群化管理以及配置流水线

jenkins pipeline 复杂的发布流程

Jenkins Pipeline sh 显示名称/标签

linux12Devops -->10Jenkins流水线容器化+Harbor私有仓库

再见 Jenkins!几行脚本搞定自动化部署,这款神器有点厉害