[转] Jenkins Pipeline插件十大最佳实践
[From] http://blog.didispace.com/jenkins-pipeline-top-10-action/
Jenkins Pipeline 插件对于 Jenkins 用户来说可以让用户能够改变游戏规则。基于 Groovy 中的领域特定语言(DSL),Pipeline 插件使 Pipelines 可以有脚本来定义,并且提供了非常强大的方法来开发复杂的、多步 DevOps Pipeline 。本文记录了编写 Jenkins Pipeline 的一些的最佳实践和不推荐的代码示例和说明。
1. 要使用真正的 Jenkins Pipeline
不要使用像 Build Pipeline 插件或者 Buildflow 插件这样的旧插件。而是使用真正的 Jenkins Pipiline 插件套装。
这是因为 Pipeline 插件是底层工作自身的一个改变和提升的 Step。与 Freestyle 任务不同,Pipeline 对 Jenkins 主机重新启动具有适应能力,并且有可以替代以前用于构建多步、复杂交付 Pipeline 的许多旧插件的内置功能。
有关入门的更多信息,请访问 https://jenkins.io/solutions/pipeline/
2. 就像写代码一样开发你的 Pipeline
使用这个功能可以让你像做其他软件一样将 Pipeline 描述代码以 Jenkinsfile 方式存储在 SCM 中,然后进行版本测试。
这样做可以将 Pipeline 作为代码看待,强制执行良好的规范,并开辟了一个新的功能领域,如多分支、拉请求检测和组织扫描 GitHub 和 BitBucket。
还应该将流水线脚本称为默认名称:Jenkinsfile ,并且以 #!groovy 脚本开头,以便 IDE ,GitHub 和其他工具将其识别为 Groovy 并启用代码高亮。
3. 要在 Stage 块内进行作业
Pipeline 内的任何非安装作业都应该在某一个 Stage 块内执行。
这是因为 Stage 是 Pipeline 的逻辑分割。 可以将工作分为几个 Stage,可以将 Pipeline 分成清晰的几个步骤。
例如:
stage 'build' //build stage 'test' //test |
更好的是:Pipeline Stage View 插件将各个 Stage 看作 Pipeline 的唯一分段。
4. 在节点内执行实际作业
Pipeline 里的实质性作业都应该发生在一个 Node 块内。
因为在默认情况下,Jenkinsfile 脚本本身在 Jenkins 主机上运行,使用一个预期使用很少资源的轻量级执行器。 在任何实质性作业过程中,例如从 Git 服务器克隆代码或编译 Java 应用程序,都应该利用 Jenkins 分布式构建能力, 在代理节点中运行。
例如:
stage 'build' node{ checkout scm sh 'mvn clean install' } |
5. 做一个并行的 Step
Pipeline 提供了一个很直接的语法,用于将你的 Pipeline 分为并行的 Step。
这是因为并行分配工作将使你的 Pipeline 运行更快,并更快地获得开发人员和团队其他成员的反馈。
例如:
parallel 'shifting':{ //everything }, 'left':{ //I can } |
提示:使用 Parallel Test Executor 插件让 Jenkins 自动确定如何在最佳并行池中运行 xUnit 兼容测试!您可以在 CloudBees 博客上阅读有关并行测试执行的更多信息。
6. 在并行 Step 中的使用 Node
为什么我们要在并行 Step 中获取并使用一个 Node? 这是因为并行化有一个主要的优势是:可以同时进行更多的实质性工作(参见最佳实践4)! 通常,我们应该想在 Pipeline 的并行分支中获取一个 Node 来提高并发构建速度。
例如:
parallel 'integration-tests':{ node('mvn-3.3'){ ... } }, 'functional-tests':{ node('selenium'){ ... } } |
7. 在 Step 的 Timeout 代码块内进行 Input
Pipeline 有一个简单的机制,那就是可以将 Pipeline 中的任何 Step 定时。 作为最佳实践,我们应该总是计划使用 Timeout 块内 使用 Input。
这是为了健康的 Pipeline 的清理。如果在给定的窗口内没有出现批准,则在超时时间中的 Input 将允许被清理(即中止)。
例如:
timeout(time:5, unit:'DAYS') { input message:'Approve deployment?', submitter: 'it- ops' } |
8. 文件暂存优先于存档
在将暂存能力添加到流水线 DSL 之前,存档是在 Pipeline 中的 Node 或 Stage 之间共享文件的最佳方式。 如果只需要在流水线的 Stage 和 Node 之间共享文件,则应该使用暂存/提取而不是存档。
这是因为暂存和提取被设计用于在 Stage 和 Node 之间共享文件,例如应用程序的源代码。另一方面,存档被设计用于长期文件存储(例如,你构建的中间二进制文件)。
例如:
stash excludes: 'target/', name: 'source' unstash 'source' |
9. 不要在 Node 块内使用 Input
虽然可以在节点块中使用一个 Input 语句,但我们绝对不应该这样做。
因为 Input 元素会暂停 Pipeline 执行而去等待批准——无论是自动还是手动。 这些批准自然需要一些时间。 另一方面,当因为 Input 停下来的时候,节点元素会获取并保持锁定工作空间和耗资源的任务,这将是一个昂贵的资源。
因此,要在 Node 之外创建 Input。
例如:
stage 'deployment' input 'Do you approve deployment?' node{ //deploy the things } |
10. 不要使用 Env 全局变量设置环境变量
尽管你可以编辑 Env 全局变量中来定义某些环境设置,但我们应该使用 withEnv 语法。
Env 变量是全局变量,所以我们不鼓励去直接改变它,因为样就改变了全局环境,所以建议使用 withEnv 语法。
例如:
withEnv(["PATH+MAVEN=${tool 'm3'}/bin"]) { sh "mvn clean verify" } |
本译文转载自:公众号【JFrog杰蛙DevOPs】
[转] Jenkins Pipeline插件十大最佳实践的更多相关文章
- 外媒速递:十大最佳心理学概念助你提升Web设计效果
外媒速递是核子可乐精选的近日国外媒体的精彩文章推荐,希望大家喜欢! 本期给大家推荐的是帮助你提升Web设计效果的十大最佳心理学概念.改善企业云环境协作效率的九款卓越工具.选择移动应用开发工具时要考虑的 ...
- 十大最佳Leap Motion体感控制器应用
十大最佳Leap Motion体感控制器应用 Leap Motion Controller也许还没有准备好大规模的发售,但是毫无疑问,这款小巧的动作捕捉器是我们见过的最酷的设备之一.这款设备的硬件 ...
- 软件设计师【软件工程:软件开发模型、XP极限编程十二最佳实践】
一.软件开发模型 二.XP极限编程十二最佳实践
- Pipeline流水线设计的最佳实践
谈到到DevOps,持续交付流水线是绕不开的一个话题,相对于其他实践,通过流水线来实现快速高质量的交付价值是相对能快速见效的,特别对于开发测试人员,能够获得实实在在的收益.很多文章介绍流水线,不管是j ...
- SQL Server Integration Services的10大最佳实践
原文出处:https://blogs.msdn.microsoft.com/sqlcat/2013/09/16/top-10-sql-server-integration-services-best- ...
- jenkins2 pipeline插件的10个最佳实践
jenkins pipeline的10个最佳实践. 文章来自:http://www.ciandcd.com文中的代码来自可以从github下载: https://github.com/ciandcd ...
- 最重要的 Java EE 最佳实践
參考:IBM WebSphere 开发人员技术期刊: 最重要的 Java EE 最佳实践 IBM WebSphere 开发人员技术期刊: 最重要的 Java EE 最佳实践 2004 年 IBM® W ...
- 【原】Jenkins pipeline中资料总结
docker-compose 快速部署持续集成测试环境 Gitlab+Harbor+Jenkins pipeline 实现 tag run docker Images https://www.cnbl ...
- Jenkins使用Pipeline插件实现多个Job之间的串并联(教程收集)(待实践)
在原始不使用插件时,在Jenkins我们要实现多个Job之间的连续集成时,我们一般的做法就是在每个Job上关联另一个Job,但是,这样做有个弊端,只能是连续的,如果要实现串或并联这样的,估计比较难:但 ...
随机推荐
- Django框架 之 admin管理工具(组件使用)
Django框架 之 admin管理工具(组件使用) 浏览目录 激活管理工具 使用管理工具 admin的定制 admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理 ...
- 第九课,ROS仿真1
---恢复内容开始--- 1.stage simulator 它是一个轻量级的仿真软件,它的包名称是stage_ros,可以进入看看,其包含地图在子目录world下, 启动之: rosrun stag ...
- 查询某张表被哪些存储过程或者视图用到的sql语句
/*查询某张表被哪些存储过程或者视图用到的sql语句*/select distinct object_name(id) from syscomments where id in (select id ...
- 什么是“光照度(Illuminance)”?
光照度是光度学的概念,了解光照度,要从人眼的特性说起. 人眼的光谱响应 传统的辐射度学的概念(如“功率”,单位为“瓦”)可以客观描述“能量”,但当其用来描述“光照”时却是不合适的,原因在于:人眼对不同 ...
- background-image属性的设置
对于图片,首先我们先想到是背景图片.因为我们许许多的装饰都是用背景图片来实现的.既然这样,那么就从CSS控制背景图片讲起吧.1.CSS控制背景图片: 对于一个网页,我们开始设计的时候,可能没有过 ...
- wp7启动+幻灯片效果
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Wi ...
- js 去空格 和 获得字节数
function removespace(str) { return str.replace(/(^\s*)|(\s*$)/g, ""); } function getLength ...
- 2018年第九届蓝桥杯C/C++A组省赛(最后一题)
第十题 付账问题 [题目描述] 几个人一起出去吃饭是常有的事.但在结帐的时候,常常会出现一些争执. 现在有 n 个人出去吃饭,他们总共消费了 S 元.其中第 i 个人带了 ai 元.幸 ...
- 201621123012 《java程序设计》第2周学习总结
1. 本章学习总结 1.学习了java许多了基本语法,string函数,arraylist函数的各种功能方法和调用. 2.了解了除for循环之外的foreach循环 3.学习了各种数值类的包装 4.熟 ...
- 题解 UVA10212 【The Last Non-zero Digit.】
题目链接 这题在学长讲完之后和看完题解之后才明白函数怎么构造. 这题构造一个$f(n)$ $f(n)$ $=$ $n$除以 $2^{a}$ $*$ $5^{b}$ ,$a$ , $b$ 分别是 $n$ ...