热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Jenkins脚本化管道或声明性管道

如何解决《Jenkins脚本化管道或声明性管道》经验,为你挑选了5个好方法。

我正在尝试将旧式项目基础工作流转换为基于Jenkins的管道.在浏览文档时,我发现有两种不同的语法命名scripteddeclarative.比如declarative最近的Jenkins web 语法发布(2016年底).虽然有一个新的语法版本,但Jenkins仍然支持脚本语法.

现在,我不确定这两种类型中哪一种最适合.scripted语法很快就会被弃用?那么declarativeJenkins管道的未来会是什么?

任何可以分享关于这两种语法类型的想法的人.



1> Nayana Adass..:

当Jenkins Pipeline首次创建时,Groovy被选为基础.Jenkins长期以来一直使用嵌入式Groovy引擎为管理员和用户提供高级脚本编写功能.此外,Jenkins Pipeline的实现者发现Groovy是构建现在被称为"Scripted Pipeline"DSL的坚实基础.

由于它是一个功能齐全的编程环境,Scripted Pipeline为Jenkins用户提供了极大的灵活性和可扩展性.Groovy学习曲线通常不适合给定团队的所有成员,因此创建Declarative Pipeline是为了为Jenkins Pipeline创作提供更简单,更具见解性的语法.

这两个基本上都是下面的Pipeline子系统.它们都是"Pipeline as code"的持久实现.他们都能够使用Pipeline内置的步骤或插件提供的步骤.两者都能够使用共享库

然而,它们的区别在于语法和灵活性.声明性限制用户可以使用更严格和预定义的结构,使其成为更简单的连续交付管道的理想选择.Scripted提供的限制很少,因为结构和语法的唯一限制往往由Groovy本身定义,而不是任何管道专用系统,使其成为高级用户和需求更复杂的用户的理想选择.顾名思义,Declarative Pipeline鼓励声明性编程模型.脚本管道遵循更为命令式的编程模型.

复制自https://jenkins.io/doc/book/pipeline/syntax/#compare


@cauchy对于脚本化和声明性管道都有相同的文档,但是由于脚本化是针对高级用户的,因此它不是首先显示的,而是所有文档都具有脚本化和声明性管道文档和示例。您只需要在声明性管道的每个文档示例下面切换编码语法即可
我试图将一系列声明性管道作业移至脚本化管道,因为它们“对于高级用户和要求更复杂的用户是理想的选择”。脚本化管道的文档几乎为零。没有。这样几乎没用。人们应该意识到这是一个很大的差异。

2> CodyK..:

另一件需要考虑的事情是声明性管道有一个script()步骤.这可以运行任何脚本化管道.所以我的建议是使用声明性管道,如果需要,可以使用script()脚本化管道.因此,您将获得两全其美.


您是否有在声明式管道中使用script()块的示例?该链接没有任何内容。

3> eamon1234..:

我最近从使用kubernetes代理编写的脚本切换到声明式。直到18年7月,声明性管道还没有完全指定kubernetes容器的能力。但是,通过添加该yamlFile步骤,您现在可以从存储库中的yaml文件中读取Pod模板。

然后,这使您可以使用例如vscode的出色kubernetes插件来验证您的pod模板,然后将其读入Jenkinsfile并按需要使用容器。

pipeline {
  agent {
    kubernetes {
      label 'jenkins-pod'
      yamlFile 'jenkinsPodTemplate.yml'
    }
  }
  stages {
    stage('Checkout code and parse Jenkinsfile.json') {
      steps {
        container('jnlp'){
          script{
            inputFile = readFile('Jenkinsfile.json')
            cOnfig= new groovy.json.JsonSlurperClassic().parseText(inputFile)
            cOntainerTag= env.BRANCH_NAME + '-' + env.GIT_COMMIT.substring(0, 7)
            println "pipeline cOnfig==> ${config}"
          } // script
        } // container('jnlp')
      } // steps
    } // stage

如上所述,您可以添加脚本块。具有自定义jnlp和docker的示例pod模板。

apiVersion: v1
kind: Pod
metadata:
  name: jenkins-pod
spec:
  containers:
  - name: jnlp
    image: jenkins/jnlp-slave:3.23-1
    imagePullPolicy: IfNotPresent
    tty: true
  - name: rsync
    image: mrsixw/concourse-rsync-resource
    imagePullPolicy: IfNotPresent
    tty: true
    volumeMounts:
      - name: nfs
        mountPath: /dags
  - name: docker
    image: docker:17.03
    imagePullPolicy: IfNotPresent
    command:
    - cat
    tty: true
    volumeMounts:
      - name: docker
        mountPath: /var/run/docker.sock
  volumes:
  - name: docker
    hostPath:
      path: /var/run/docker.sock
  - name: nfs
    nfs:
      server: 10.154.0.3
      path: /airflow/dags



4> burnettk..:

声明似乎是更具有前瞻性的选择,也是人们推荐的选择.它是Visual Pipeline Editor唯一可以支持的.它支持验证.它最终拥有脚本的大部分功能,因为你可以在大多数情况下回归脚本.偶尔会有人提出一个用例,他们不能完全按照声明的方式做他们想做的事情,但这通常是那些已经使用脚本一段时间的人,这些功能差距很可能会及时关闭.

更多背景:https://jenkins.io/blog/2017/02/03/declarative-pipeline-ga/


如这里的其他多个答案所述,没有什么可以更适应未来的需求了,它们服务于不同的受众和目的,并且两者具有相同的基础系统。声明式限制用户,脚本给他们太多的自由,因此您需要使用不同的詹金斯知识水平才能应用每种知识。
我同意你的看法。这个答案在我写这篇文章的时候是最好的,但是我很高兴詹金斯的作者现在更好地记录了这些差异,并明确指出脚本不会很快消失。:)

5> 小智..:

Jenkins文档正确地解释并比较了这两种类型.

引用:"Scripted Pipeline为Jenkins用户提供了极大的灵活性和可扩展性.对于给定团队的所有成员来说,Groovy学习曲线通常并不理想,因此创建Declarative Pipeline是为了提供更简单,更具见解性的语法.创作詹金斯管道.

这两者基本上都是下面的管道子系统."

在这里阅读更多内容:https://jenkins.io/doc/book/pipeline/syntax/#compare


推荐阅读
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 网址:https:vue.docschina.orgv2guideforms.html表单input绑定基础用法可以通过使用v-model指令,在 ... [详细]
author-avatar
zxy寒
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有