jenkins2 pipeline插件的10个最佳实践
jenkins pipeline的10个最佳实践。
文章来自:http://www.ciandcd.com
文中的代码来自可以从github下载: https://github.com/ciandcd
翻译自:https://www.cloudbees.com/blog/top-10-best-practices-jenkins-pipeline-plugin
1. 使用最新的jenkins pipeline插件Jenkins Pipeline suite of plugins, 而不使用旧的类似功能插件,例如不使用旧的build pipeline plugin 或者旧的buildflow plugin。
新的pipeline插件是完全不同于旧的插件,新的pipeline job不同于旧的freestyle job,新的pipeline job可以不受jenkins master重启的影响,可以暂停重启。 新的pipeline job还可以实现更复杂的持续发布流程。
更多pipeline的学习,可以参考 https://jenkins.io/solutions/pipeline/。
2. 通过groovy脚本实现pipeline
使用groovy实现的pipeline流程,可以将对应的groovy脚本存储在文件Jenkinsfile, 且实现与源代码一起的版本控制。
Jenkinsfile与源代码一起版本控制,使得整个pipeline流程和源代码一起可重现。 通过Jenkinsfile实现的pipeline job,可以更容易地支持多个分支multi-branch, 更容易地支持组织和团队(GitHub organiztion and BitBucket Team)里的多个项目。
最好在groovy脚本Jenkinsfile的第一行增加#!groovy, 使得各种ide工具或web page能够支持groovy的语法高亮。

3. 尽可能地在stage里实现所有的任务
所有pipeline里非配置的任务最好在stage块里实现。通过stage使得pipeline里所有的任务被组织为多个stage,每个stage都是一组相关的任务。
例如:
stage 'build'
//build
stage 'test'
//test
pipeline view 插件使得 pipeline的stage的view和monitor更加的清楚。

4. 所有资源消耗的操作都应该放到node上执行
默认地,Jenkinsfile里的脚本在jenkins master上执行,如果资源消耗的操作都在master上执行的话将影响jenkins master的运行。 所以任何资源消耗的操作都应该放到node中被分布到agent上执行,例如从git server clone代码,java代码的编译等都应该在node中执行。
stage 'build'
node{
checkout scm
sh 'mvn clean install'
}
5. 尽可能地使用parallel来使得任务并行地执行
将任务并行后,使得整个job的流程更够更快地完成,开发人员能够更早地得到结果。
parallel 'shifting':{
//everything
}, 'left':{
//I can
}
对于unit的并行执行,可以查看插件Parallel Test Executor plugin,更多详细介绍查看Parallel Test Execution on the CloudBees Blog。
6. 并行的任务运行在不同的node上
对于并行的任务使用不同的node,使得并行的任务不相互影响,能够实现真正的并行执行。
parallel 'integration-tests':{
node('mvn-3.3'){ ... }
}, 'functional-tests':{
node('selenium'){ ... }
}
7. 不要在node里使用input
input 能够暂停pipeline的执行等待用户的approve(自动化或手动),通常地approve需要一些时间等待用户相应。 如果在node里使用input将使得node本身和workspace被lock, 不能够被别的job使用。
所以一般在node外面使用input。
stage 'deployment'
input 'Do you approve deployment?'
node{
//deploy the things
}
8. inputs应该封装在timeout中。
pipeline可以很容易地使用timeout来对step设定timeout时间。对于input我们也最好使用timeout。
timeout(time:5, unit:'DAYS') {
input message:'Approve deployment?', submitter: 'it-ops'
}
9. 应该使用withEnv来修改环境变量
不建议使用env来修改全局的环境变量,这样后面的groovy脚本也将被影响。
一般使用withEnv来修改环境变量,变量的修改只在withEnv的块内起作用。
withEnv(["PATH+MAVEN=${tool 'm3'}/bin"]) {
sh "mvn clean verify"
}
10.尽量使用stash来实现stage/node间共享文件,不要使用archive
在stash被引入pipeline DSL前,一般使用archive来实现node或stage间文件的共享。 在stash引入后,最好使用stash/unstash来实现node/stage间文件的共享。例如在不同的node/stage间共享源代码。
archive用来实现更长时间的文件存储。
stash excludes: 'target/', name: 'source'
unstash 'source'
jenkins2 pipeline插件的10个最佳实践的更多相关文章
- 《转载》Java异常处理的10个最佳实践
本文转载自 ImportNew - 挖坑的张师傅 异常处理在编写健壮的 Java 应用中扮演着非常重要的角色.异常处理并不是功能性需求,它需要优雅地处理任何错误情况,比如资源不可用.非法的输入.nul ...
- Java异常处理的10个最佳实践
本文作者: ImportNew - 挖坑的张师傅 未经许可,禁止转载! 异常处理在编写健壮的 Java 应用中扮演着非常重要的角色.异常处理并不是功能性需求,它需要优雅地处理任何错误情况,比如资源不可 ...
- restful api的10个最佳实践
Web API在过去的几年里非常盛行,因为它有着语法简单.规范化和轻量级的优点,因为得到广泛的推崇,很多过往的技术手段都慢慢转换为使用Web API来开发.而Web API通常使用的设计方式是REST ...
- 编写 Node.js Rest API 的 10 个最佳实践
Node.js 除了用来编写 WEB 应用之外,还可以用来编写 API 服务,我们在本文中会介绍编写 Node.js Rest API 的最佳实践,包括如何命名路由.进行认证和测试等话题,内容摘要如下 ...
- Java异常处理 10 个最佳实践
异常处理是Java 开发中的一个重要部分.它是关乎每个应用的一个非功能性需求,是为了处理任何错误状况,比如资源不可访问,非法输入,空输入等等.Java提供了几个异常处理特性,以try,catch 和 ...
- Apache Kafka: 优化部署的10个最佳实践
原文作者:Ben Bromhead 译者:江玮 原文地址:https://www.infoq.com/articles/apache-kafka-best-practices-to-opti ...
- SQL Server Integration Services的10大最佳实践
原文出处:https://blogs.msdn.microsoft.com/sqlcat/2013/09/16/top-10-sql-server-integration-services-best- ...
- Java 编程中关于异常处理的 10 个最佳实践
异常处理是Java 开发中的一个重要部分.它是关乎每个应用的一个非功能性需求,是为了处理任何错误状况,比如资源不可访问,非法输入,空输入等等.Java提供了几个异常处理特性,以try,catch 和 ...
- 关于shell脚本编程的10个最佳实践
每一个在UNIX/Linux上工作的程序员可能都擅长shell脚本编程.但大家解决问题的方式却不尽相同,这要取决于对专业知识的掌握程度.使 用命令的种类.看待问题的方式等等.对于那些处在shell脚本 ...
随机推荐
- SAP无损耗,FP前台和回写均有2%损耗
SAP前台显示无损耗 FP前台显示有损耗 回写也有损耗 检查:从SAP取数到FP表是没有损耗 1132物料编码的主数据也是没有损耗 检查:FP_MO2SAP存储过程
- The certificate used to sign “AppName” has either expired or has been revoked. An updated certificate is required to sign and install the application解决
问题 The certificate used to sign "AppName" has either expired or has been revoked. An updat ...
- [DB]MariaDB 与 MySql 数据库
目前 MariaDB 已经出来几年了,本文编辑时的官网最新稳定版本是 10.1.14 链接:https://downloads.mariadb.org/ 但百度没有下载,搜狗给的下载版本是 5.5.2 ...
- iOS9支付完成无法获取回调
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id ...
- Web服务器Nginx多方位优化策略
标签:性能 Web 架构 Nginx 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dongsong.blog.51cto.co ...
- POJ 2175 Evacuation Plan 费用流 负圈定理
题目给了一个满足最大流的残量网络,判断是否费用最小. 如果残量网络中存在费用负圈,那么不是最优,在这个圈上增广,增广1的流量就行了. 1.SPFA中某个点入队超过n次,说明存在负环,但是这个点不一定在 ...
- 纵表、横表互转的SQL
纵表.横表互转的SQL By:大志若愚 1.建表: 纵表结构 Table_A create table Table_A ( 姓名 ), 课程 ), 成绩 int ) ) ) ) ) ) 姓名 课程 ...
- ASP.NET访问网络映射盘&实现文件上传读取功能
最近在改Web的时候,遇到一个问题,要跨机器访问共享文件夹,以实现文件正常上传下载功能. 要实现该功能,可以采用HTTP的方式,也可以使用网络映射磁盘的方式,今天主要给大家分享一下使用网络映射磁盘的方 ...
- PHP 数组排序
数组中的元素能够以字母或数字顺序进行升序或降序排序. PHP - 数组的排序函数 在本节中,我们将学习如下 PHP 数组排序函数: sort() - 以升序对数组排序 rsort() - 以降序对数组 ...
- Form居中显示
(1)居中显示 Form1->Position = poScreenCenter; (2)无边框显示 Form1->BorderStyle = bsNone; (3)显示透明性 Form1 ...