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 分成清晰的几个步骤。

例如:

  1. stage 'build'

  2. //build

  3. stage 'test'

  4. //test

更好的是:Pipeline Stage View 插件将各个 Stage 看作 Pipeline 的唯一分段。

4. 在节点内执行实际作业

Pipeline 里的实质性作业都应该发生在一个 Node 块内。

因为在默认情况下,Jenkinsfile 脚本本身在 Jenkins 主机上运行,使用一个预期使用很少资源的轻量级执行器。 在任何实质性作业过程中,例如从 Git 服务器克隆代码或编译 Java 应用程序,都应该利用 Jenkins 分布式构建能力, 在代理节点中运行。

例如:

  1. stage 'build'

  2. node{

  3.    checkout scm

  4.    sh 'mvn clean install'

  5. }

5. 做一个并行的 Step

Pipeline 提供了一个很直接的语法,用于将你的 Pipeline 分为并行的 Step。

这是因为并行分配工作将使你的 Pipeline 运行更快,并更快地获得开发人员和团队其他成员的反馈。

例如:

  1. parallel 'shifting':{

  2.    //everything

  3. }, 'left':{

  4.    //I can

  5. }

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

6. 在并行 Step 中的使用 Node

为什么我们要在并行 Step 中获取并使用一个 Node? 这是因为并行化有一个主要的优势是:可以同时进行更多的实质性工作(参见最佳实践4)! 通常,我们应该想在 Pipeline 的并行分支中获取一个 Node 来提高并发构建速度。

例如:

  1. parallel 'integration-tests':{

  2.    node('mvn-3.3'){ ... }

  3. }, 'functional-tests':{

  4.    node('selenium'){ ... }

  5. }

7. 在 Step 的 Timeout 代码块内进行 Input

Pipeline 有一个简单的机制,那就是可以将 Pipeline 中的任何 Step 定时。 作为最佳实践,我们应该总是计划使用 Timeout 块内 使用 Input。

这是为了健康的 Pipeline 的清理。如果在给定的窗口内没有出现批准,则在超时时间中的 Input 将允许被清理(即中止)。

例如:

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

  2.    input message:'Approve deployment?', submitter: 'it-  ops'

  3. }

8. 文件暂存优先于存档

在将暂存能力添加到流水线 DSL 之前,存档是在 Pipeline 中的 Node 或 Stage 之间共享文件的最佳方式。 如果只需要在流水线的 Stage 和 Node 之间共享文件,则应该使用暂存/提取而不是存档。

这是因为暂存和提取被设计用于在 Stage 和 Node 之间共享文件,例如应用程序的源代码。另一方面,存档被设计用于长期文件存储(例如,你构建的中间二进制文件)。

例如:

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

  2. unstash 'source'

9. 不要在 Node 块内使用 Input

虽然可以在节点块中使用一个 Input 语句,但我们绝对不应该这样做。

因为 Input 元素会暂停 Pipeline 执行而去等待批准——无论是自动还是手动。 这些批准自然需要一些时间。 另一方面,当因为 Input 停下来的时候,节点元素会获取并保持锁定工作空间和耗资源的任务,这将是一个昂贵的资源。

因此,要在 Node 之外创建 Input。

例如:

  1. stage 'deployment'

  2. input 'Do you approve deployment?'

  3. node{

  4.    //deploy the things

  5. }

10. 不要使用 Env 全局变量设置环境变量

尽管你可以编辑 Env 全局变量中来定义某些环境设置,但我们应该使用 withEnv 语法。

Env 变量是全局变量,所以我们不鼓励去直接改变它,因为样就改变了全局环境,所以建议使用 withEnv 语法。

例如:

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

  2.    sh "mvn clean verify"

  3. }

译文:转载自公众号【JFrog杰蛙DevOps】

原文:https://www.cloudbees.com/blog/top-10-best-practices-jenkins-pipeline-plugin

优秀人才不缺工作机会,只缺适合自己的好机会。但是他们往往没有精力从海量机会中找到最适合的那个。100offer 会对平台上的人才和企业进行严格筛选,让「最好的人才」和「最好的公司」相遇。扫描下方二维码,注册 100offer,谈谈你对下一份工作的期待。一周内,收到 5-10 个满足你要求的好机会

Jenkins Pipeline插件十大最佳实践!相关推荐

  1. C++类设计和实现的十大最佳实践

    点击蓝字 关注我们 来源于网络,侵删 C++代码提供了足够的灵活性,因此对于大部分工程师来说都很难把握.本文介绍了写好C++代码需要遵循的10个最佳实践,并在最后提供了一个工具可以帮助我们分析C++代 ...

  2. 十大最佳DevOps工具

    十大最佳DevOps工具(转载) [编者的话]DevOps落地重要的一方面是选好工具集,本文介绍了最流行的DevOps工具. 开发和运维的集成翻开了软件开发的全新篇章.如果你还是DevOps的新手,或 ...

  3. 福布斯2021年十大最佳人工智能硕士课程,清华、港大入选

    来源:AI科技评论 本文约2400字,建议阅读5分钟 本文为你分享福布斯网站发布的"2021年十大最佳人工智能和数据科学硕士项目"榜单. 如今,人工智能成为科技和商业领域最热门的话 ...

  4. linux源码头文件_您必须在2020年尝试的十大最佳Linux码头

    linux源码头文件 Who says Linux cannot be beautiful? Today we'll be going over the top 10 best Linux docks ...

  5. 十大最佳Python书籍[2021年更新]

    随着软件热潮中就业机会的增加,对python开发人员的需求很大.可以通读概念并实践逻辑方法解决方案,从而掌握Python编程技能. Python编码书籍使您可以通过新颖的构思来制作有趣而有趣的项目.它 ...

  6. Python十大最佳IDE

    每当我们在任何领域开发新事物时,无论是住房.电信.IT还是游戏,我们总是希望将所有必需品捆绑在一个单独的开发项目中,并创造一个满足所有需求的环境.集成开发环境(IDE)或集成开发环境(Integrat ...

  7. 适合初学者和经验的十大最佳Python书籍-2022

    1,最佳Python书籍清单 在这篇文章中,我收集了一些适合初学者和经验丰富的最佳Python书籍的信息.我们还提到了每本书的简要介绍.这将帮助您根据您的要求选择最好的python书籍.此外,它还涵盖 ...

  8. 计算机里面有鬼的恐怖游戏,2018年度十大最佳PC恐怖游戏

    一年一度的万圣节来了,恐怖气氛浓郁,鬼宅.吸血鬼.,恶灵.丧尸.玩具熊.僵尸还有阴暗的人心,一切恐怖的元素都会让你背后发凉.在这个节点,我们为大家整理了2018年度十大最佳恐怖游戏,送你去和鬼混.1. ...

  9. 阿里古谦:阿里互联网架构的6大最佳实践-博客-云栖社区-阿里云

    阿里古谦:阿里互联网架构的6大最佳实践-博客-云栖社区-阿里云

最新文章

  1. [原] Jenkins Android 自动打包配置
  2. android webview js交互,响应webview图片的响应事件
  3. 文件签名魔塔50层android反编译破解
  4. leetcode 617. 合并二叉树 思考分析
  5. 关联式容器(map,set,multimap,multiset)
  6. 使用设备mac好还是随机mac好_省4000我给MBP16搭配了一块2T SSD:希捷 酷鱼飞翼 Fast SSD使用测评...
  7. sql基础之DDL(Data Definition Languages)
  8. react-native viewpager用法
  9. sql join后显示二维数据_大数据交叉报表解决案例(方案)
  10. ns3学习之ns3模拟基本流程
  11. 英语音标中KK音标、IPA音标、DJ音标各是什么意思
  12. 频率变标算法(FSA,Frequency Scaling)
  13. 用余子式、代数余子式和伴随 来求逆矩阵
  14. 用计算机创造一个宇宙,人工智能令整个宇宙变成一个玄计算机,宇宙是虚拟的,真实世界...
  15. 会讲话是学问,会听话是学问
  16. 史上最全Python学习笔记(基于《Python学习手册(第4版)》)——Part3 语句和语法
  17. Tita: 在教育科技公司成功实施 OKR
  18. Unity Hub许可证问题 达到最大申请次数之类的,Serial has reached the maximum number of activations
  19. MATLAB 逻辑数组
  20. Altium designer(Protel)中常用库及部分元件名中英文对照

热门文章

  1. centos7 系统备份
  2. docker 时间不一致,时区设置
  3. easyui 去掉按钮 虚线框
  4. LINUX自旋锁详解
  5. Java接口interface
  6. How program works
  7. Python学习之字典
  8. 更改as的默认gradle地址_面试官:谈谈这4种磁盘IO调度算法--CFQ、NOOP、Deadline、AS...
  9. boot的几个依赖 spring_Spring boot依赖管理和数据库使用
  10. java程序设计B_Java程序设计11——GUI设计与事件处理B