JenkinsPipeline插件的十大最佳实践

Jenkins是卓越的自动化工具之一。Jenkins可通过使用插件进行设计扩展。插件使Jenkins拥有极大的灵活性,可以在各种平台上自动执行各种流程。Jenkins Pipeline建立在这种灵活性和丰富的插件生态系统的基础上,同时使Jenkins用户能够将其Jenkins自动化代码编写。

本文翻译自devops.com

Jenkins Pipeline插件是Jenkins用户的游戏规则改变者。Pipeline插件基于Groovy中的领域特定语言(DSL),使管道可编写脚本,并且是开发复杂的多步DevOps管道的强大方法。本文档记录了编写Jenkins Pipelines的一些注意事项-带有代码示例和说明。

**1.DO:**使用真正的JenkinsPipeline

不要使用Build Pipeline插件或Buildflow插件等较旧的插件。而是使用真正的 Jenkins Pipeline插件套件。Pipeline插件是基础工作本身的逐步改进。与自由式作业不同,管道对Jenkins主服务器重启具有弹性,并且具有内置功能,该功能取代了以前用于构建多步,复杂交付管道的许多较旧的插件。

有关入门的更多信息,请访问 https://jenkins.io/solutions/pipeline/。

**2.DO:**以代码形式开发管道

使用该功能将您的Jenkinsfile存储在SCM中,然后进行版本测试,就像测试其他软件一样。将您的Pipeline视为代码可加强良好的纪律性,还开辟了新的特性和功能世界,例如多分支,提取请求检测以及对GitHub和BitBucket的组织扫描。

您还应该将Pipeline脚本命名为默认名称:Jenkinsfile并启动以下脚本头,以便您的IDE,GitHub和其他工具将其识别为Groovy并启用代码突出显示:

#!groovy

**3.DO:**所有工作都在一个阶段

管道中的任何非设置工作都应在阶段块内进行。阶段是管道的逻辑分段。将工作分为几个阶段,可以将您的管道分成不同的工作部分。

stage("build"){

更好的是:Pipeline Stage View插件将阶段可视化为管道的唯一部分

**4.DO:**所有方法在一个节点内工作

管道内的任何重要工作都应在节点块内进行。默认情况下,Jenkinsfile脚本本身在Jenkins主服务器上运行,使用的是轻量级执行程序,预计该执行程序将使用很少的资源。任何实质性工作,例如从Git服务器克隆代码或编译Java应用程序,都应利用Jenkins分布式构建功能并运行代理节点。

stage("build"){

5.DO:可以并行进行工作

Pipeline提供了一种简单明了的语法,可将您的管道分为并行步骤。用它!并行分支工作将使您的管道运行更快,将管道步骤向左移动,并更快地向开发人员和团队其他成员获取反馈。

parallel 'shifting':{

温馨提示:使用 Parallel Test Executor插件 让Jenkins自动确定如何在最佳并行存储桶中运行与xUnit兼容的测试!在CloudBees博客上阅读有关并行测试执行的更多信息  。

**6.DO:**在并行步骤中获取节点

管道中的并行性的主要好处之一是:做更多的实质性工作(请参阅最佳实践4)!通常,您应该争取在管道的并行分支中获取一个节点。

parallel 'integration-tests':{

7.Don't: 在节点块内使用输入

虽然可以将输入语句放在节点块中,但绝对不可以。输入元素暂停管道执行以等待批准–自动还是手动。当然,这些批准可能需要一些时间。另一方面,node元素获取并锁定工作空间和笨重的Jenkins执行器,这是一种昂贵的资源,可在暂停输入时保留。因此,请在节点外部创建输入。

stage 'deployment'

**8.DO:**为输入设置超时时间

管道具有一种简单的机制,可以使管道的任何给定步骤超时。作为最佳实践,您应该始终计划输入周围的超时。为了健康地清理管道,这就是原因。如果在给定窗口内未进行批准,则将输入包装成超时将允许清除它们(即中止)。

timeout(time:5, unit:'DAYS') {

**9.Don't:**使用env全局变量设置环境变量

虽然您可以在env全局变量中编辑某些设置,但应改用withEnv语法。由于env变量是全局变量,因此不建议直接更改它,因为它会全局更改环境,因此建议使用withEnv语法。

withEnv(["PATH+MAVEN=${tool 'm3'}/bin"]) {

**10.DO:**优先存储文件而不是归档

在将隐藏功能添加到管道DSL之前,存档是在管道中的节点或阶段之间共享文件的最佳方法。如果只需要在管道的阶段和节点之间共享文件,则应使用存储/取消存储而不是存档。暂存和取消暂存旨在在阶段和节点之间共享文件(例如,应用程序的源代码)。另一方面,存档是为长期文件存储而设计的(例如,构建中的中间二进制文件)。

stash excludes: 'target/', name: 'source'

**总结:**谢谢阅读!新的Jenkins Pipeline插件越来越受到关注,尤其是随着 Jenkins 2.0的发布。我相信随着世界各地的开发人员与Jenkins一起开发其DevOps管道,将会有越来越多的最佳实践。我们将尽快发布后续博客和更多示例!


此号没有留言评论功能,为了给大家及时回复,请各位小伙伴们扫描入群,就差你了 扫描二维码添加小助手

本文分享自微信公众号 - DevOps云学堂(idevopsvip)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

JenkinsPipeline插件的十大最佳实践 - HelloWorld