前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JenkinsPipeline插件的十大最佳实践

JenkinsPipeline插件的十大最佳实践

作者头像
DevOps云学堂
发布2020-02-11 13:23:04
4.1K0
发布2020-02-11 13:23:04
举报
文章被收录于专栏:DevOps持续集成DevOps持续集成

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

本文翻译自devops.com

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并启用代码突出显示:

代码语言:javascript
复制
#!groovy

3.DO:所有工作都在一个阶段

管道中的任何非设置工作都应在阶段块内进行。阶段是管道的逻辑分段。将工作分为几个阶段,可以将您的管道分成不同的工作部分。

代码语言:javascript
复制
stage("build"){

}

stage("test"){

}

更好的是:Pipeline Stage View插件将阶段可视化为管道的唯一部分

4.DO:所有方法在一个节点内工作

管道内的任何重要工作都应在节点块内进行。默认情况下,Jenkinsfile脚本本身在Jenkins主服务器上运行,使用的是轻量级执行程序,预计该执行程序将使用很少的资源。任何实质性工作,例如从Git服务器克隆代码或编译Java应用程序,都应利用Jenkins分布式构建功能并运行代理节点。

代码语言:javascript
复制
stage("build"){
  node{
      checkout scm
      sh " mvn clean package"
  }
}

5.DO:可以并行进行工作

Pipeline提供了一种简单明了的语法,可将您的管道分为并行步骤。用它!并行分支工作将使您的管道运行更快,将管道步骤向左移动,并更快地向开发人员和团队其他成员获取反馈。

代码语言:javascript
复制
parallel 'shifting':{
    //everything
}, 'left':{
    //I can
}

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

6.DO:在并行步骤中获取节点

管道中的并行性的主要好处之一是:做更多的实质性工作(请参阅最佳实践4)!通常,您应该争取在管道的并行分支中获取一个节点。

代码语言:javascript
复制
parallel 'integration-tests':{
    node('mvn-3.3'){ ... }
}, 'functional-tests':{
    node('selenium'){ ... }
}

7.Don't: 在节点块内使用输入

虽然可以将输入语句放在节点块中,但绝对不可以。输入元素暂停管道执行以等待批准–自动还是手动。当然,这些批准可能需要一些时间。另一方面,node元素获取并锁定工作空间和笨重的Jenkins执行器,这是一种昂贵的资源,可在暂停输入时保留。因此,请在节点外部创建输入。

代码语言:javascript
复制
stage 'deployment'
input 'Do you approve deployment?'
node{
    //deploy the things
}

8.DO:为输入设置超时时间

管道具有一种简单的机制,可以使管道的任何给定步骤超时。作为最佳实践,您应该始终计划输入周围的超时。为了健康地清理管道,这就是原因。如果在给定窗口内未进行批准,则将输入包装成超时将允许清除它们(即中止)。

代码语言:javascript
复制
timeout(time:5, unit:'DAYS') {
    input message:'Approve deployment?', submitter: 'it-ops'
}

9.Don't:使用env全局变量设置环境变量

虽然您可以在env全局变量中编辑某些设置,但应改用withEnv语法。由于env变量是全局变量,因此不建议直接更改它,因为它会全局更改环境,因此建议使用withEnv语法。

代码语言:javascript
复制
withEnv(["PATH+MAVEN=${tool 'm3'}/bin"]) {
    sh "mvn clean verify"
}

10.DO:优先存储文件而不是归档

在将隐藏功能添加到管道DSL之前,存档是在管道中的节点或阶段之间共享文件的最佳方法。如果只需要在管道的阶段和节点之间共享文件,则应使用存储/取消存储而不是存档。暂存和取消暂存旨在在阶段和节点之间共享文件(例如,应用程序的源代码)。另一方面,存档是为长期文件存储而设计的(例如,构建中的中间二进制文件)。

代码语言:javascript
复制
stash excludes: 'target/', name: 'source'
unstash 'source'

总结: 谢谢阅读!新的Jenkins Pipeline插件越来越受到关注,尤其是随着 Jenkins 2.0的发布。我相信随着世界各地的开发人员与Jenkins一起开发其DevOps管道,将会有越来越多的最佳实践。我们将尽快发布后续博客和更多示例!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps持续集成 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
CODING DevOps
CODING DevOps 一站式研发管理平台,包括代码托管、项目管理、测试管理、持续集成、制品库等多款产品和服务,涵盖软件开发从构想到交付的一切所需,使研发团队在云端高效协同,实践敏捷开发与 DevOps,提升软件交付质量与速度。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档