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个最佳实践的更多相关文章

  1. 《转载》Java异常处理的10个最佳实践

    本文转载自 ImportNew - 挖坑的张师傅 异常处理在编写健壮的 Java 应用中扮演着非常重要的角色.异常处理并不是功能性需求,它需要优雅地处理任何错误情况,比如资源不可用.非法的输入.nul ...

  2. Java异常处理的10个最佳实践

    本文作者: ImportNew - 挖坑的张师傅 未经许可,禁止转载! 异常处理在编写健壮的 Java 应用中扮演着非常重要的角色.异常处理并不是功能性需求,它需要优雅地处理任何错误情况,比如资源不可 ...

  3. restful api的10个最佳实践

    Web API在过去的几年里非常盛行,因为它有着语法简单.规范化和轻量级的优点,因为得到广泛的推崇,很多过往的技术手段都慢慢转换为使用Web API来开发.而Web API通常使用的设计方式是REST ...

  4. 编写 Node.js Rest API 的 10 个最佳实践

    Node.js 除了用来编写 WEB 应用之外,还可以用来编写 API 服务,我们在本文中会介绍编写 Node.js Rest API 的最佳实践,包括如何命名路由.进行认证和测试等话题,内容摘要如下 ...

  5. Java异常处理 10 个最佳实践

    异常处理是Java 开发中的一个重要部分.它是关乎每个应用的一个非功能性需求,是为了处理任何错误状况,比如资源不可访问,非法输入,空输入等等.Java提供了几个异常处理特性,以try,catch 和 ...

  6. Apache Kafka: 优化部署的10个最佳实践

    原文作者:Ben Bromhead      译者:江玮 原文地址:https://www.infoq.com/articles/apache-kafka-best-practices-to-opti ...

  7. SQL Server Integration Services的10大最佳实践

    原文出处:https://blogs.msdn.microsoft.com/sqlcat/2013/09/16/top-10-sql-server-integration-services-best- ...

  8. Java 编程中关于异常处理的 10 个最佳实践

    异常处理是Java 开发中的一个重要部分.它是关乎每个应用的一个非功能性需求,是为了处理任何错误状况,比如资源不可访问,非法输入,空输入等等.Java提供了几个异常处理特性,以try,catch 和 ...

  9. 关于shell脚本编程的10个最佳实践

    每一个在UNIX/Linux上工作的程序员可能都擅长shell脚本编程.但大家解决问题的方式却不尽相同,这要取决于对专业知识的掌握程度.使 用命令的种类.看待问题的方式等等.对于那些处在shell脚本 ...

随机推荐

  1. svn 命令行创建和删除 分支和tags

    创建分支 svn cp -m "create branch" http://svn_server/xxx_repository/trunk http://svn_server/xx ...

  2. 使用Jquery解析xml的两种方法

    第一种方案(最稳妥): 先将String格式的xml转换为xml对象,然后再用Jquery解析xml对象 var returnDataXml = parseXML(returnData); var p ...

  3. sql left join、right join、inner join

    left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只 ...

  4. 介绍开源的.net通信框架NetworkComms框架 源码分析(十三)ThreadSafeStream

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  5. Fiddler学习之——对Android应用进行抓包

    Fiddler做为实用的http抓包工具,它的原理是在本机开启了一个http的代理服务器,然后它会转发所有的http请求和响应,因此,它比一般的firebug或者是chrome自带的抓包工具要好用的多 ...

  6. 为什么for(int i=0;i<9;i++) 在c语言中是错误的?

    显示表示,i 变量不可以在for中定义,必须在外面定义,这是为什么? 因为C99标准以前的C标准是不支持临时变量在for循环中定义的. C99标准就支持这样写.但是目前有些编译器并不怎么愿意支持C99 ...

  7. RRDTool 三个命令的使用

    要了解rrdtool如何使用就要先从rrd的数据存储方式开始,rrdtool就是为了操作这个数据库的工具,抄来下面一段文字解释. 0x01 什么是rrd数据库 所谓的“Round Robin” 其实是 ...

  8. vb.net下载代码

    '后台 Partial Public Class Download2 Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender ...

  9. Sublime Text 3常用快捷键 以及package control 安装

    网络上搜索到的,现整理下来备用: package control安装 view下 ctrl+~ import urllib.request,os; pf = 'Package Control.subl ...

  10. 关于使用tracert命令检测网络问题

    tracert命令是一个电脑网络工具-Windows命令行界面程序和内建命令,运行该命令后可以显示本机IP到达目标IP所经过的路由器IP地址,和响应的延迟信息! 在windows操作系统中,点击“开始 ...