JenkinsPipeline插件的十大最佳实践

Stella981
• 阅读 807

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

本文翻译自devops.com

JenkinsPipeline插件的十大最佳实践

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管道,将会有越来越多的最佳实践。我们将尽快发布后续博客和更多示例!


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

JenkinsPipeline插件的十大最佳实践

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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
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
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Jenkins Pipeline集成Sonar进行代码质量检测
JenkinsPipeline集成Sonar进行代码质量检测简介jenkinspipelineJenkinsPipeline(或简称为"Pipeline")是一套jenkins插件,将持续交付的实现和实施集成到Jenkins中。Jenk
Stella981 Stella981
3年前
Jenkins+RF持续集成测试(一) 环境搭建
通常在自动化测试中,我们需要对自动化测试用例定时构建,并生成报告并通过邮件发给指定的人。最佳工具选择莫过于Jenkins了。通过Jenkins集成robotframework插件,我们能非常方便的定时从git/svn上拉取最新的自动化测试用例,然后执行用例并把最终结果以测试报告的形式发给指定的人群。下面我就来详细为大家介绍一下Jenkins集成RF插件
Stella981 Stella981
3年前
Jenkins插件下载镜像加速
转:https://www.cnblogs.com/zhuochong/p/10082498.html可供选择的jenkins2插件镜像列表:Jenkins所有镜像列表:http://mirrors.jenkinsci.org/status.html比如日本的镜像:http://mirror.esuni.jp/jenkins/,ht
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这